86 lines
1.7 KiB
C#
86 lines
1.7 KiB
C#
using System.Data;
|
|
using Database.Common;
|
|
using Insight.Database;
|
|
|
|
namespace Database.Core.DataControlLanguage
|
|
{
|
|
public class SetupOrganization
|
|
{
|
|
|
|
IDbConnection _db;
|
|
string _schema;
|
|
string _user;
|
|
string _password;
|
|
|
|
public SetupOrganization(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 SetupOrganization in Database", 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);
|
|
|
|
}
|
|
}
|
|
}
|