139 lines
6.3 KiB
C#
139 lines
6.3 KiB
C#
|
|
using Insight.Database;
|
|||
|
|
using System.Data;
|
|||
|
|
|
|||
|
|
namespace Database.Tenants
|
|||
|
|
{
|
|||
|
|
internal class TenantData
|
|||
|
|
{
|
|||
|
|
private readonly IDbConnection _db;
|
|||
|
|
|
|||
|
|
public TenantData(IDbConnection db)
|
|||
|
|
{
|
|||
|
|
_db = db;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private async Task InsertInitialData(string schema)
|
|||
|
|
{
|
|||
|
|
// Permission types
|
|||
|
|
var insertPermissionTypes = $@"
|
|||
|
|
INSERT INTO {schema}.permission_types (name) VALUES
|
|||
|
|
('NAVIGATION'),
|
|||
|
|
('COMMAND'),
|
|||
|
|
('VIEW'),
|
|||
|
|
('FEATURE')";
|
|||
|
|
await _db.ExecuteAsync(insertPermissionTypes);
|
|||
|
|
|
|||
|
|
// Permissions
|
|||
|
|
var insertPermissions = $@"
|
|||
|
|
INSERT INTO {schema}.permissions (name, type_id) VALUES
|
|||
|
|
-- Navigation permissions
|
|||
|
|
('OVERVIEW_VIEW', (SELECT id FROM {schema}.permission_types WHERE name = 'NAVIGATION')),
|
|||
|
|
('CALENDAR_VIEW', (SELECT id FROM {schema}.permission_types WHERE name = 'NAVIGATION')),
|
|||
|
|
('SALES_VIEW', (SELECT id FROM {schema}.permission_types WHERE name = 'NAVIGATION')),
|
|||
|
|
('CUSTOMERS_VIEW', (SELECT id FROM {schema}.permission_types WHERE name = 'NAVIGATION')),
|
|||
|
|
|
|||
|
|
-- Command permissions
|
|||
|
|
('CREATE_PRODUCT', (SELECT id FROM {schema}.permission_types WHERE name = 'COMMAND')),
|
|||
|
|
('EDIT_PRODUCT', (SELECT id FROM {schema}.permission_types WHERE name = 'COMMAND')),
|
|||
|
|
('DELETE_PRODUCT', (SELECT id FROM {schema}.permission_types WHERE name = 'COMMAND')),
|
|||
|
|
('CREATE_CUSTOMER', (SELECT id FROM {schema}.permission_types WHERE name = 'COMMAND')),
|
|||
|
|
('EDIT_CUSTOMER', (SELECT id FROM {schema}.permission_types WHERE name = 'COMMAND')),
|
|||
|
|
|
|||
|
|
-- View permissions
|
|||
|
|
('PRODUCT_DETAILS', (SELECT id FROM {schema}.permission_types WHERE name = 'VIEW')),
|
|||
|
|
('CUSTOMER_DETAILS', (SELECT id FROM {schema}.permission_types WHERE name = 'VIEW')),
|
|||
|
|
('SALES_STATISTICS', (SELECT id FROM {schema}.permission_types WHERE name = 'VIEW')),
|
|||
|
|
|
|||
|
|
-- Feature permissions
|
|||
|
|
('ADVANCED_SEARCH', (SELECT id FROM {schema}.permission_types WHERE name = 'FEATURE')),
|
|||
|
|
('EXPORT_DATA', (SELECT id FROM {schema}.permission_types WHERE name = 'FEATURE')),
|
|||
|
|
('BULK_OPERATIONS', (SELECT id FROM {schema}.permission_types WHERE name = 'FEATURE'))";
|
|||
|
|
await _db.ExecuteAsync(insertPermissions);
|
|||
|
|
|
|||
|
|
// Roles
|
|||
|
|
var insertRoles = $@"
|
|||
|
|
INSERT INTO {schema}.roles (name) VALUES
|
|||
|
|
('SYSTEM_ADMIN'),
|
|||
|
|
('TENANT_ADMIN'),
|
|||
|
|
('POWER_USER'),
|
|||
|
|
('BASIC_USER')";
|
|||
|
|
await _db.ExecuteAsync(insertRoles);
|
|||
|
|
|
|||
|
|
// Top-level navigation
|
|||
|
|
var insertTopNav = $@"
|
|||
|
|
INSERT INTO {schema}.navigation_link_templates
|
|||
|
|
(parent_id, url, permission_id, icon, default_order)
|
|||
|
|
VALUES
|
|||
|
|
(NULL, '/overview',
|
|||
|
|
(SELECT id FROM {schema}.permissions WHERE name = 'OVERVIEW_VIEW'),
|
|||
|
|
'home', 10),
|
|||
|
|
(NULL, '/sales',
|
|||
|
|
(SELECT id FROM {schema}.permissions WHERE name = 'SALES_VIEW'),
|
|||
|
|
'shopping-cart', 20),
|
|||
|
|
(NULL, '/customers',
|
|||
|
|
(SELECT id FROM {schema}.permissions WHERE name = 'CUSTOMERS_VIEW'),
|
|||
|
|
'users', 30)";
|
|||
|
|
await _db.ExecuteAsync(insertTopNav);
|
|||
|
|
|
|||
|
|
// Sub-navigation
|
|||
|
|
var insertSubNav = $@"
|
|||
|
|
INSERT INTO {schema}.navigation_link_templates
|
|||
|
|
(parent_id, url, permission_id, icon, default_order)
|
|||
|
|
VALUES
|
|||
|
|
((SELECT id FROM {schema}.navigation_link_templates WHERE url = '/sales'),
|
|||
|
|
'/sales/create',
|
|||
|
|
(SELECT id FROM {schema}.permissions WHERE name = 'CREATE_PRODUCT'),
|
|||
|
|
'plus', 1),
|
|||
|
|
((SELECT id FROM {schema}.navigation_link_templates WHERE url = '/customers'),
|
|||
|
|
'/customers/create',
|
|||
|
|
(SELECT id FROM {schema}.permissions WHERE name = 'CREATE_CUSTOMER'),
|
|||
|
|
'user-plus', 1)";
|
|||
|
|
await _db.ExecuteAsync(insertSubNav);
|
|||
|
|
|
|||
|
|
// Translations for top-level
|
|||
|
|
var insertTopTranslations = $@"
|
|||
|
|
INSERT INTO {schema}.navigation_link_template_translations
|
|||
|
|
(template_id, language, display_name)
|
|||
|
|
VALUES
|
|||
|
|
((SELECT id FROM {schema}.navigation_link_templates WHERE url = '/overview'),
|
|||
|
|
'da-DK', 'Overblik'),
|
|||
|
|
((SELECT id FROM {schema}.navigation_link_templates WHERE url = '/overview'),
|
|||
|
|
'en-US', 'Overview'),
|
|||
|
|
((SELECT id FROM {schema}.navigation_link_templates WHERE url = '/sales'),
|
|||
|
|
'da-DK', 'Salg'),
|
|||
|
|
((SELECT id FROM {schema}.navigation_link_templates WHERE url = '/sales'),
|
|||
|
|
'en-US', 'Sales'),
|
|||
|
|
((SELECT id FROM {schema}.navigation_link_templates WHERE url = '/customers'),
|
|||
|
|
'da-DK', 'Kunder'),
|
|||
|
|
((SELECT id FROM {schema}.navigation_link_templates WHERE url = '/customers'),
|
|||
|
|
'en-US', 'Customers')";
|
|||
|
|
await _db.ExecuteAsync(insertTopTranslations);
|
|||
|
|
|
|||
|
|
// Translations for sub-navigation
|
|||
|
|
var insertSubTranslations = $@"
|
|||
|
|
INSERT INTO {schema}.navigation_link_template_translations
|
|||
|
|
(template_id, language, display_name)
|
|||
|
|
VALUES
|
|||
|
|
((SELECT id FROM {schema}.navigation_link_templates WHERE url = '/sales/create'),
|
|||
|
|
'da-DK', 'Opret salg'),
|
|||
|
|
((SELECT id FROM {schema}.navigation_link_templates WHERE url = '/sales/create'),
|
|||
|
|
'en-US', 'Create sale'),
|
|||
|
|
((SELECT id FROM {schema}.navigation_link_templates WHERE url = '/customers/create'),
|
|||
|
|
'da-DK', 'Opret kunde'),
|
|||
|
|
((SELECT id FROM {schema}.navigation_link_templates WHERE url = '/customers/create'),
|
|||
|
|
'en-US', 'Create customer')";
|
|||
|
|
await _db.ExecuteAsync(insertSubTranslations);
|
|||
|
|
|
|||
|
|
// Giv admin 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);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|