Conforming all these db calls
This commit is contained in:
parent
5ca874abe9
commit
05d6977a76
17 changed files with 337 additions and 414 deletions
88
Database/Tenants/Setup.cs
Normal file
88
Database/Tenants/Setup.cs
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
using System;
|
||||
using System.Data;
|
||||
using System.Text.RegularExpressions;
|
||||
using Database.Common;
|
||||
using Insight.Database;
|
||||
|
||||
namespace Database.Tenants
|
||||
{
|
||||
public class Setup
|
||||
{
|
||||
|
||||
IDbConnection _db;
|
||||
string _schema;
|
||||
string _user;
|
||||
string _password;
|
||||
|
||||
public Setup(IDbConnection db)
|
||||
{
|
||||
_db = db;
|
||||
}
|
||||
|
||||
public void CreateUserWithSchemaInDatabase(string schema, string user, string password)
|
||||
{
|
||||
|
||||
_schema = schema;
|
||||
_password = password;
|
||||
_user = user;
|
||||
|
||||
if (!Validations.IsValidSchemaName(_schema))
|
||||
throw new ArgumentException("Invalid schema name", _schema);
|
||||
|
||||
using (var transaction = _db.BeginTransaction())
|
||||
{
|
||||
try
|
||||
{
|
||||
CreateSchema();
|
||||
CreateRole();
|
||||
GrantSchemaRights();
|
||||
|
||||
transaction.Commit();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
transaction.Rollback();
|
||||
throw new InvalidOperationException("Failed to CreateUserWithSchemaInDatabase", ex);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
private void ExecuteSql(string sql)
|
||||
{
|
||||
_db.ExecuteSql(sql);
|
||||
}
|
||||
|
||||
private void CreateSchema()
|
||||
{
|
||||
var sql = $"CREATE SCHEMA IF NOT EXISTS {_schema}";
|
||||
ExecuteSql(sql);
|
||||
}
|
||||
|
||||
private void CreateRole()
|
||||
{
|
||||
var sql = $"CREATE ROLE {_user} LOGIN PASSWORD '{_password}';";
|
||||
ExecuteSql(sql);
|
||||
|
||||
var sql1 = $"ALTER ROLE {_user} SET search_path='{_schema}';";
|
||||
ExecuteSql(sql1);
|
||||
|
||||
}
|
||||
|
||||
private void GrantSchemaRights()
|
||||
{
|
||||
var sql = $"GRANT USAGE ON SCHEMA {_schema} TO {_user};";
|
||||
ExecuteSql(sql);
|
||||
|
||||
var sql1 = $"ALTER DEFAULT PRIVILEGES IN SCHEMA {_schema} " +
|
||||
$"GRANT INSERT, SELECT, UPDATE PRIVILEGES ON TABLES TO {_user};";
|
||||
ExecuteSql(sql1);
|
||||
|
||||
var sql2 = $"GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA {_schema} TO {_user};";
|
||||
ExecuteSql(sql2);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,133 +0,0 @@
|
|||
using System;
|
||||
using System.Data;
|
||||
using System.Text.RegularExpressions;
|
||||
using Insight.Database;
|
||||
namespace Database.Tenants
|
||||
{
|
||||
|
||||
public class Setup
|
||||
{
|
||||
private readonly IDbConnection _db;
|
||||
|
||||
public Setup(IDbConnection db)
|
||||
{
|
||||
_db = db;
|
||||
}
|
||||
|
||||
public async Task CreateTenantInDatabase(string schema, string user, string password)
|
||||
{
|
||||
if (!Regex.IsMatch(schema, "^[a-zA-Z0-9_]+$"))
|
||||
throw new ArgumentException("Invalid schema name");
|
||||
|
||||
|
||||
await CreateUser(user, password);
|
||||
await CreateSchema(schema);
|
||||
await GrantSchemaRights(schema, user);
|
||||
|
||||
await CreateNavigationLinkTemplatesTable(schema);
|
||||
await CreateNavigationLinkTemplateTranslationsTable(schema);
|
||||
}
|
||||
|
||||
private async Task CreateSchema(string schema)
|
||||
{
|
||||
var sql = $"CREATE SCHEMA IF NOT EXISTS {schema}";
|
||||
await _db.ExecuteAsync(sql);
|
||||
}
|
||||
private async Task CreateUser(string user, string password)
|
||||
{
|
||||
var sql = $"CREATE USER {user} WITH PASSWORD '{password}';";
|
||||
await _db.ExecuteAsync(sql);
|
||||
}
|
||||
|
||||
private async Task GrantSchemaRights(string schema, string user)
|
||||
{
|
||||
var sql = $"GRANT USAGE ON SCHEMA {schema} TO {user};";
|
||||
await _db.ExecuteAsync(sql);
|
||||
|
||||
var sql1 = $"ALTER DEFAULT PRIVILEGES IN SCHEMA {schema} " +
|
||||
$"GRANT ALL PRIVILEGES ON TABLES TO {user};";
|
||||
await _db.ExecuteAsync(sql1);
|
||||
|
||||
var sql2 = $"GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA {schema} TO {user};";
|
||||
await _db.ExecuteAsync(sql2);
|
||||
|
||||
|
||||
|
||||
}
|
||||
//private async Task CreatePermissionTypesTable(string schema)
|
||||
//{
|
||||
// var sql = $@"
|
||||
// CREATE TABLE IF NOT EXISTS {schema}.permission_types (
|
||||
// id SERIAL PRIMARY KEY,
|
||||
// name VARCHAR(100) NOT NULL UNIQUE
|
||||
// )";
|
||||
// await _db.ExecuteAsync(sql);
|
||||
//}
|
||||
|
||||
//private async Task CreatePermissionsTable(string schema)
|
||||
//{
|
||||
// var sql = $@"
|
||||
// CREATE TABLE IF NOT EXISTS {schema}.permissions (
|
||||
// id SERIAL PRIMARY KEY,
|
||||
// name VARCHAR(100) NOT NULL UNIQUE,
|
||||
// type_id INTEGER NOT NULL,
|
||||
// FOREIGN KEY (type_id) REFERENCES {schema}.permission_types(id)
|
||||
// )";
|
||||
// await _db.ExecuteAsync(sql);
|
||||
//}
|
||||
|
||||
//private async Task CreateRolesTable(string schema)
|
||||
//{
|
||||
// var sql = $@"
|
||||
// CREATE TABLE IF NOT EXISTS {schema}.roles (
|
||||
// id SERIAL PRIMARY KEY,
|
||||
// name VARCHAR(100) NOT NULL UNIQUE
|
||||
// )";
|
||||
// await _db.ExecuteAsync(sql);
|
||||
//}
|
||||
|
||||
//private async Task CreateRolePermissionsTable(string schema)
|
||||
//{
|
||||
// var sql = $@"
|
||||
// CREATE TABLE IF NOT EXISTS {schema}.role_permissions (
|
||||
// role_id INTEGER NOT NULL,
|
||||
// permission_id INTEGER NOT NULL,
|
||||
// PRIMARY KEY (role_id, permission_id),
|
||||
// FOREIGN KEY (role_id) REFERENCES {schema}.roles(id),
|
||||
// FOREIGN KEY (permission_id) REFERENCES {schema}.permissions(id)
|
||||
// )";
|
||||
// await _db.ExecuteAsync(sql);
|
||||
//}
|
||||
|
||||
private async Task CreateNavigationLinkTemplatesTable(string schema)
|
||||
{
|
||||
var sql = $@"
|
||||
CREATE TABLE IF NOT EXISTS {schema}.navigation_link_templates (
|
||||
id SERIAL PRIMARY KEY,
|
||||
parent_id INTEGER NULL,
|
||||
url VARCHAR(500) NOT NULL,
|
||||
permission_id INTEGER NULL,
|
||||
icon VARCHAR(100) NULL,
|
||||
default_order INTEGER NOT NULL,
|
||||
FOREIGN KEY (permission_id) REFERENCES {schema}.permissions(id),
|
||||
FOREIGN KEY (parent_id) REFERENCES {schema}.navigation_link_templates(id)
|
||||
)";
|
||||
await _db.ExecuteAsync(sql);
|
||||
}
|
||||
|
||||
private async Task CreateNavigationLinkTemplateTranslationsTable(string schema)
|
||||
{
|
||||
var sql = $@"
|
||||
CREATE TABLE IF NOT EXISTS {schema}.navigation_link_template_translations (
|
||||
id SERIAL PRIMARY KEY,
|
||||
template_id INTEGER NOT NULL,
|
||||
language VARCHAR(10) NOT NULL,
|
||||
display_name VARCHAR(100) NOT NULL,
|
||||
FOREIGN KEY (template_id) REFERENCES {schema}.navigation_link_templates(id)
|
||||
)";
|
||||
await _db.ExecuteAsync(sql);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue