1
0
mirror of https://gitlab.com/Deukhoofd/DeukBot4.git synced 2026-04-03 11:10:05 +00:00

Work on permission system, along with initial work on database(postgres) system

This commit is contained in:
2018-03-29 15:35:00 +02:00
parent 3a85a9f18f
commit 25d691c4e9
13 changed files with 337 additions and 15 deletions

View File

@@ -0,0 +1,28 @@
using System;
using DeukBot4.MessageHandlers.Permissions;
using Npgsql;
namespace DeukBot4.Database
{
public class DatabaseConnection : IDisposable
{
public static string ConnectionString { private get; set; }
private readonly NpgsqlConnection _connection;
public DatabaseConnection()
{
_connection = new NpgsqlConnection(ConnectionString);
_connection.Open();
}
public void Dispose()
{
_connection.Dispose();
}
public static implicit operator NpgsqlConnection(DatabaseConnection conn)
{
return conn._connection;
}
}
}

View File

@@ -0,0 +1,25 @@
using Npgsql;
namespace DeukBot4.Database
{
public static class DatabaseInitializer
{
public static void Initialize()
{
using (var conn = new DatabaseConnection())
{
using (var cmd = new NpgsqlCommand())
{
cmd.Connection = conn;
cmd.CommandText = "CREATE TABLE IF NOT EXISTS permission_roles (" +
"server_id bigint NOT NULL," +
"role_id bigint NOT NULL," +
"permission_level smallint NOT NULL," +
"PRIMARY KEY(server_id, role_id)" +
")";
cmd.ExecuteNonQuery();
}
}
}
}
}

View File

@@ -0,0 +1,51 @@
using System.Threading.Tasks;
using DeukBot4.MessageHandlers.Permissions;
using DeukBot4.Utilities;
using Npgsql;
namespace DeukBot4.Database
{
public static class DatabaseRolePermissions
{
public static async Task SetRolePermission(ulong serverId, ulong roleId, PermissionLevel permissionLevel)
{
using (var conn = new DatabaseConnection())
{
using (var cmd = new NpgsqlCommand())
{
cmd.Connection = conn;
cmd.CommandText = "INSERT INTO permission_roles (server_id, role_id, permission_level)" +
"VALUES (@server_id, @role_id, @permission_level) " +
"ON CONFLICT (server_id, role_id) DO UPDATE SET permission_level = @permission_level";
cmd.Parameters.AddWithValue("server_id", serverId.ToLong());
cmd.Parameters.AddWithValue("role_id", roleId.ToLong());
cmd.Parameters.AddWithValue("permission_level", (sbyte)permissionLevel);
await cmd.ExecuteNonQueryAsync();
}
}
}
public static async Task<PermissionLevel> GetRolePermission(ulong serverId, ulong roleId)
{
using (var conn = new DatabaseConnection())
{
using (var cmd = new NpgsqlCommand())
{
cmd.Connection = conn;
cmd.CommandText =
"SELECT permission_level FROM permission_roles WHERE server_id = @server_id AND role_id = @role_id";
cmd.Parameters.AddWithValue("server_id", serverId.ToLong());
cmd.Parameters.AddWithValue("role_id", roleId.ToLong());
var reader = cmd.ExecuteReader();
while (await reader.ReadAsync())
{
return (PermissionLevel)(sbyte)reader.GetInt16(0);
}
return (PermissionLevel)sbyte.MinValue;
}
}
}
}
}