Working on roles, users and create tenant
This commit is contained in:
parent
269bf50c78
commit
fcffb57ac6
21 changed files with 483 additions and 56 deletions
88
Database/Tenants/Class1.cs
Normal file
88
Database/Tenants/Class1.cs
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Database.Tenants
|
||||
{
|
||||
internal class Class1
|
||||
{
|
||||
private async Task InsertInitialData(string schema)
|
||||
{
|
||||
// Indsæt roles
|
||||
var insertRoles = $@"
|
||||
INSERT INTO {schema}.roles (name) VALUES
|
||||
('SYSTEM_ADMIN'),
|
||||
('TENANT_ADMIN'),
|
||||
('POWER_USER'),
|
||||
('BASIC_USER')";
|
||||
await _db.ExecuteAsync(insertRoles);
|
||||
|
||||
// Indsæt permissions
|
||||
var insertPermissions = $@"
|
||||
INSERT INTO {schema}.permissions (name) VALUES
|
||||
('OVERVIEW_VIEW'),
|
||||
('CALENDAR_VIEW'),
|
||||
('SALES_VIEW'),
|
||||
('CUSTOMERS_VIEW'),
|
||||
('POS_VIEW'),
|
||||
('STATISTICS_VIEW')";
|
||||
await _db.ExecuteAsync(insertPermissions);
|
||||
|
||||
// Indsæt role permissions for system admin (får alle permissions)
|
||||
var insertAdminPermissions = $@"
|
||||
INSERT INTO {schema}.role_permissions (role_id, permission_id)
|
||||
SELECT
|
||||
(SELECT id FROM {schema}.roles WHERE name = 'SYSTEM_ADMIN'),
|
||||
id
|
||||
FROM {schema}.permissions";
|
||||
await _db.ExecuteAsync(insertAdminPermissions);
|
||||
|
||||
// Indsæt navigation templates
|
||||
var insertTemplates = $@"
|
||||
INSERT INTO {schema}.navigation_link_templates
|
||||
(url, permission_id, icon, default_order)
|
||||
VALUES
|
||||
('/overview',
|
||||
(SELECT id FROM {schema}.permissions WHERE name = 'OVERVIEW_VIEW'),
|
||||
'home', 10),
|
||||
('/calendar',
|
||||
(SELECT id FROM {schema}.permissions WHERE name = 'CALENDAR_VIEW'),
|
||||
'calendar', 20),
|
||||
('/sales',
|
||||
(SELECT id FROM {schema}.permissions WHERE name = 'SALES_VIEW'),
|
||||
'shopping-cart', 30),
|
||||
('/customers',
|
||||
(SELECT id FROM {schema}.permissions WHERE name = 'CUSTOMERS_VIEW'),
|
||||
'users', 40),
|
||||
('/pos',
|
||||
(SELECT id FROM {schema}.permissions WHERE name = 'POS_VIEW'),
|
||||
'credit-card', 50),
|
||||
('/statistics',
|
||||
(SELECT id FROM {schema}.permissions WHERE name = 'STATISTICS_VIEW'),
|
||||
'chart-bar', 60)";
|
||||
await _db.ExecuteAsync(insertTemplates);
|
||||
|
||||
// Indsæt translations
|
||||
var insertTranslations = $@"
|
||||
INSERT INTO {schema}.navigation_link_template_translations
|
||||
(template_id, language, display_name)
|
||||
VALUES
|
||||
(1, 'da-DK', 'Overblik'),
|
||||
(1, 'en-US', 'Overview'),
|
||||
(2, 'da-DK', 'Kalender'),
|
||||
(2, 'en-US', 'Calendar'),
|
||||
(3, 'da-DK', 'Salg'),
|
||||
(3, 'en-US', 'Sales'),
|
||||
(4, 'da-DK', 'Kunder'),
|
||||
(4, 'en-US', 'Customers'),
|
||||
(5, 'da-DK', 'Kassesystem'),
|
||||
(5, 'en-US', 'POS System'),
|
||||
(6, 'da-DK', 'Statistik'),
|
||||
(6, 'en-US', 'Statistics')";
|
||||
await _db.ExecuteAsync(insertTranslations);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
127
Database/Tenants/TenantSetupService.cs
Normal file
127
Database/Tenants/TenantSetupService.cs
Normal file
|
|
@ -0,0 +1,127 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using Insight.Database;
|
||||
namespace Database.Tenants
|
||||
{
|
||||
|
||||
public class TenantSetupService
|
||||
{
|
||||
private readonly IDbConnection _db;
|
||||
|
||||
public TenantSetupService(IDbConnection db)
|
||||
{
|
||||
_db = db;
|
||||
}
|
||||
|
||||
public async Task CreateTenant(string schema)
|
||||
{
|
||||
if (!Regex.IsMatch(schema, "^[a-zA-Z0-9_]+$"))
|
||||
{
|
||||
throw new ArgumentException("Invalid schema name");
|
||||
}
|
||||
|
||||
await CreateSchema(schema);
|
||||
await CreateRolesTable(schema);
|
||||
await CreatePermissionsTable(schema);
|
||||
await CreateRolePermissionsTable(schema);
|
||||
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 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 CreatePermissionsTable(string schema)
|
||||
{
|
||||
var sql = $@"
|
||||
CREATE TABLE IF NOT EXISTS {schema}.permissions (
|
||||
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,
|
||||
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)
|
||||
)";
|
||||
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