big restructure

This commit is contained in:
2026-02-11 19:28:12 +01:00
parent cd59ccd99b
commit 3eb9cc0ac4
209 changed files with 5101 additions and 2459 deletions

View File

@@ -6,6 +6,7 @@ CREATE TABLE IF NOT EXISTS `users` (
`uuid` CHAR(36) NOT NULL,
`first_name` VARCHAR(100) NOT NULL,
`last_name` VARCHAR(100) NOT NULL,
`display_name` VARCHAR(210) NOT NULL,
`email` VARCHAR(255) NOT NULL,
`profile_description` TEXT NULL,
`job_title` VARCHAR(160) NULL,
@@ -19,6 +20,7 @@ CREATE TABLE IF NOT EXISTS `users` (
`region` VARCHAR(100) NULL,
`hire_date` DATE NULL,
`email_verified_at` DATETIME NULL DEFAULT NULL,
`last_login_at` DATETIME NULL DEFAULT NULL,
`password` VARCHAR(255) NOT NULL,
`locale` VARCHAR(10) DEFAULT NULL,
`totp_secret` VARCHAR(255) DEFAULT NULL,
@@ -88,12 +90,16 @@ CREATE TABLE IF NOT EXISTS `roles` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`uuid` CHAR(36) NOT NULL,
`description` VARCHAR(255) NOT NULL,
`code` VARCHAR(50) DEFAULT NULL,
`active` TINYINT(1) NOT NULL DEFAULT 1,
`created_by` INT UNSIGNED DEFAULT NULL,
`modified_by` INT UNSIGNED DEFAULT NULL,
`created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_roles_uuid` (`uuid`),
UNIQUE KEY `uniq_roles_code` (`code`),
KEY `idx_roles_active` (`active`),
KEY `idx_roles_created_by` (`created_by`),
KEY `idx_roles_modified_by` (`modified_by`),
CONSTRAINT `fk_roles_created_by` FOREIGN KEY (`created_by`) REFERENCES `users` (`id`) ON DELETE SET NULL,
@@ -104,21 +110,29 @@ CREATE TABLE IF NOT EXISTS `permissions` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`key` VARCHAR(191) NOT NULL,
`description` VARCHAR(255) DEFAULT NULL,
`active` TINYINT(1) NOT NULL DEFAULT 1,
`is_system` TINYINT(1) NOT NULL DEFAULT 0,
`created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_permissions_key` (`key`)
UNIQUE KEY `uniq_permissions_key` (`key`),
KEY `idx_permissions_active` (`active`),
KEY `idx_permissions_system` (`is_system`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `departments` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`uuid` CHAR(36) NOT NULL,
`description` VARCHAR(255) NOT NULL,
`code` VARCHAR(50) DEFAULT NULL,
`cost_center` VARCHAR(50) DEFAULT NULL,
`active` TINYINT(1) NOT NULL DEFAULT 1,
`created_by` INT UNSIGNED DEFAULT NULL,
`modified_by` INT UNSIGNED DEFAULT NULL,
`created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_departments_uuid` (`uuid`),
KEY `idx_departments_active` (`active`),
KEY `idx_departments_created_by` (`created_by`),
KEY `idx_departments_modified_by` (`modified_by`),
CONSTRAINT `fk_departments_created_by` FOREIGN KEY (`created_by`) REFERENCES `users` (`id`) ON DELETE SET NULL,
@@ -274,6 +288,7 @@ CREATE TABLE IF NOT EXISTS `user_remember_tokens` (
`selector` CHAR(24) NOT NULL,
`token_hash` CHAR(64) NOT NULL,
`expires_at` DATETIME NOT NULL,
`expired_by_admin_at` DATETIME NULL DEFAULT NULL COMMENT 'Expired by admin action',
`created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`last_used` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
@@ -287,18 +302,19 @@ INSERT INTO `tenants` (`uuid`, `description`, `created`)
SELECT UUID(), 'Cronus', NOW()
WHERE NOT EXISTS (SELECT 1 FROM tenants WHERE description = 'Cronus');
INSERT INTO `departments` (`uuid`, `description`, `created`)
SELECT UUID(), 'IT', NOW()
INSERT INTO `departments` (`uuid`, `description`, `code`, `active`, `created`)
SELECT UUID(), 'IT', 'IT', 1, NOW()
WHERE NOT EXISTS (SELECT 1 FROM departments WHERE description = 'IT');
INSERT INTO `roles` (`uuid`, `description`, `created`)
SELECT UUID(), 'Admin', NOW()
INSERT INTO `roles` (`uuid`, `description`, `code`, `active`, `created`)
SELECT UUID(), 'Admin', 'ADMIN', 1, NOW()
WHERE NOT EXISTS (SELECT 1 FROM roles WHERE description = 'Admin');
INSERT INTO `users` (
`uuid`,
`first_name`,
`last_name`,
`display_name`,
`email`,
`password`,
`locale`,
@@ -315,6 +331,7 @@ SELECT
UUID(),
'Detlef',
'Demo',
'Detlef Demo',
'demo@user.com',
'$2y$12$KVCQvuy4Pl1aySBuzSpc7ehpZhAzYZkndDI9OaMi05E2P/Mhob5HO',
'de',
@@ -375,42 +392,47 @@ WHERE NOT EXISTS (
SELECT 1 FROM page_contents pc WHERE pc.page_id = p.id AND pc.locale = 'de'
);
INSERT INTO `permissions` (`key`, `description`)
INSERT INTO `permissions` (`key`, `description`, `active`, `is_system`)
VALUES
('users.view', 'Can view users'),
('users.create', 'Can create users'),
('users.update', 'Can update users'),
('users.delete', 'Can delete users'),
('users.self_update', 'Can update own user'),
('users.update_assignments', 'Can update user assignments'),
('address_book.view', 'Can view address book'),
('tenants.view', 'Can view tenants'),
('tenants.create', 'Can create tenants'),
('tenants.update', 'Can update tenants'),
('tenants.delete', 'Can delete tenants'),
('departments.view', 'Can view departments'),
('departments.create', 'Can create departments'),
('departments.update', 'Can update departments'),
('departments.delete', 'Can delete departments'),
('roles.view', 'Can view roles'),
('roles.create', 'Can create roles'),
('roles.update', 'Can update roles'),
('roles.delete', 'Can delete roles'),
('permissions.view', 'Can view permissions'),
('permissions.create', 'Can create permissions'),
('permissions.update', 'Can update permissions'),
('permissions.delete', 'Can delete permissions'),
('settings.view', 'Can view settings'),
('settings.update', 'Can update settings'),
('mail_log.view', 'Can view mail logs'),
('stats.view', 'Can view statistics')
ON DUPLICATE KEY UPDATE `description` = VALUES(`description`);
('users.view', 'Can view users', 1, 1),
('users.view_meta', 'Can view user status and meta', 1, 1),
('users.view_audit', 'Can view user audit log', 1, 1),
('users.create', 'Can create users', 1, 1),
('users.update', 'Can update users', 1, 1),
('users.delete', 'Can delete users', 1, 1),
('users.self_update', 'Can update own user', 1, 1),
('users.update_assignments', 'Can update user assignments', 1, 1),
('address_book.view', 'Can view address book', 1, 1),
('tenants.view', 'Can view tenants', 1, 1),
('tenants.create', 'Can create tenants', 1, 1),
('tenants.update', 'Can update tenants', 1, 1),
('tenants.delete', 'Can delete tenants', 1, 1),
('departments.view', 'Can view departments', 1, 1),
('departments.create', 'Can create departments', 1, 1),
('departments.update', 'Can update departments', 1, 1),
('departments.delete', 'Can delete departments', 1, 1),
('roles.view', 'Can view roles', 1, 1),
('roles.create', 'Can create roles', 1, 1),
('roles.update', 'Can update roles', 1, 1),
('roles.delete', 'Can delete roles', 1, 1),
('permissions.view', 'Can view permissions', 1, 1),
('permissions.create', 'Can create permissions', 1, 1),
('permissions.update', 'Can update permissions', 1, 1),
('permissions.delete', 'Can delete permissions', 1, 1),
('settings.view', 'Can view settings', 1, 1),
('settings.update', 'Can update settings', 1, 1),
('mail_log.view', 'Can view mail logs', 1, 1),
('stats.view', 'Can view statistics', 1, 1)
ON DUPLICATE KEY UPDATE
`description` = VALUES(`description`),
`active` = VALUES(`active`),
`is_system` = VALUES(`is_system`);
INSERT INTO `role_permissions` (`role_id`, `permission_id`, `created`)
SELECT r.id, p.id, NOW()
FROM roles r
JOIN permissions p ON p.`key` IN (
'users.view', 'users.create', 'users.update', 'users.delete',
'users.view', 'users.view_meta', 'users.view_audit', 'users.create', 'users.update', 'users.delete',
'users.self_update', 'users.update_assignments',
'address_book.view',
'tenants.view', 'tenants.create', 'tenants.update', 'tenants.delete',