From 4dc03f2cbfe38144fe984d0aadc39f902542fbb9 Mon Sep 17 00:00:00 2001 From: Janus Knudsen Date: Tue, 28 Jan 2025 17:14:35 +0100 Subject: [PATCH] wip --- .../IdentitySystem/DbInfrastructureSetup.cs | 96 ------------------- Database/IdentitySystem/Setup.cs | 5 +- Database/RolesPermissionSystem/Setup.cs | 3 +- 3 files changed, 5 insertions(+), 99 deletions(-) delete mode 100644 Database/IdentitySystem/DbInfrastructureSetup.cs diff --git a/Database/IdentitySystem/DbInfrastructureSetup.cs b/Database/IdentitySystem/DbInfrastructureSetup.cs deleted file mode 100644 index db86e7c..0000000 --- a/Database/IdentitySystem/DbInfrastructureSetup.cs +++ /dev/null @@ -1,96 +0,0 @@ -using Insight.Database; -using System.Data; - -namespace Database.Identity -{ - public class DbInfrastructureSetup - { - private readonly IDbConnection _db; - string _schema; - - public DbInfrastructureSetup(IDbConnection db) - { - _db = db; - } - - public async Task CreateDatabaseWithSchema(string schema) - { - _schema = schema; - - if (_db.State != ConnectionState.Open) - _db.Open(); - - using var transaction = _db.BeginTransaction(); - try - { - await CreateUserTable(); - await CreateTenantTable(); - await CreateUserTenantTable(); - await SetupRLS(); - - transaction.Commit(); - } - catch - { - transaction.Rollback(); - throw; - } - } - - private async Task CreateUserTable() - { - await _db.ExecuteSqlAsync(@$" - CREATE TABLE IF NOT EXISTS {_schema}.users ( - id SERIAL PRIMARY KEY, - email VARCHAR(256) NOT NULL UNIQUE, - password_hash VARCHAR(256) NOT NULL, - security_stamp VARCHAR(36) NOT NULL, - email_confirmed BOOLEAN NOT NULL DEFAULT FALSE, - created_date TIMESTAMP NOT NULL, - last_login_date TIMESTAMP NULL - );"); - } - - private async Task CreateTenantTable() - { - await _db.ExecuteSqlAsync(@$" - CREATE TABLE IF NOT EXISTS {_schema}.tenants ( - id SERIAL PRIMARY KEY, - connection_string VARCHAR(500) NOT NULL, - created_date TIMESTAMP NOT NULL, - created_by INTEGER REFERENCES {_schema}.users(id), - is_active BOOLEAN DEFAULT true - );"); - } - - private async Task CreateUserTenantTable() - { - await _db.ExecuteSqlAsync(@$" - CREATE TABLE IF NOT EXISTS {_schema}.user_tenants ( - user_id INTEGER REFERENCES {_schema}.users(id), - tenant_id INTEGER REFERENCES {_schema}.tenants(id), - created_date TIMESTAMP NOT NULL, - PRIMARY KEY (user_id, tenant_id) - );"); - } - - private async Task SetupRLS() - { - await _db.ExecuteSqlAsync(@$" - ALTER TABLE {_schema}.tenants ENABLE ROW LEVEL SECURITY; - ALTER TABLE {_schema}.user_tenants ENABLE ROW LEVEL SECURITY; - - DROP POLICY IF EXISTS tenant_access ON {_schema}.tenants; - CREATE POLICY tenant_access ON {_schema}.tenants - USING (id IN ( - SELECT tenant_id - FROM {_schema}.user_tenants - WHERE user_id = current_setting('app.user_id', TRUE)::INTEGER - )); - - DROP POLICY IF EXISTS user_tenant_access ON {_schema}.user_tenants; - CREATE POLICY user_tenant_access ON {_schema}.user_tenants - USING (user_id = current_setting('app.user_id', TRUE)::INTEGER);"); - } - } -} diff --git a/Database/IdentitySystem/Setup.cs b/Database/IdentitySystem/Setup.cs index 518546e..a910494 100644 --- a/Database/IdentitySystem/Setup.cs +++ b/Database/IdentitySystem/Setup.cs @@ -1,4 +1,5 @@ -using System; +using Insight.Database; +using System; using System.Data; using System.Threading.Tasks; @@ -101,7 +102,7 @@ namespace Database.Tenants { foreach (var sql in sqlCommands) { - _db.ExecuteSql(sql, transaction: transaction); + _db.Execute(sql, transaction: transaction); } transaction.Commit(); } diff --git a/Database/RolesPermissionSystem/Setup.cs b/Database/RolesPermissionSystem/Setup.cs index 2370fde..eb75a40 100644 --- a/Database/RolesPermissionSystem/Setup.cs +++ b/Database/RolesPermissionSystem/Setup.cs @@ -28,7 +28,8 @@ namespace Database.Tenants { await CreateRolesTable(schema, transaction).ConfigureAwait(false); await CreatePermissionsTable(schema, transaction).ConfigureAwait(false); - await CreateRolePermissionsTable(schema, transaction).ConfigureAwait(false); + await CreatePermissionTypesTable(schema, transaction).ConfigureAwait(false); + await CreateRolePermissionsTable(schema, transaction).ConfigureAwait(false); transaction.Commit(); }