Spaces:
Sleeping
Sleeping
| -- Migration: Add Admin Roles System | |
| -- Date: 2026-04-18 | |
| -- Purpose: Implement role-based access control for administrators | |
| CREATE TABLE IF NOT EXISTS admin_roles ( | |
| id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, | |
| role_name VARCHAR(50) NOT NULL UNIQUE, | |
| display_label VARCHAR(100) NOT NULL, | |
| description TEXT NULL, | |
| permissions_json JSON NOT NULL DEFAULT ('{}'), | |
| is_active TINYINT(1) NOT NULL DEFAULT 1, | |
| created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | |
| INDEX idx_roles_active (is_active), | |
| INDEX idx_roles_name (role_name) | |
| ) ENGINE=InnoDB; | |
| ALTER TABLE administrators | |
| ADD COLUMN IF NOT EXISTS role_id INT UNSIGNED NULL DEFAULT 1 AFTER is_active, | |
| ADD COLUMN IF NOT EXISTS last_login_at DATETIME NULL DEFAULT NULL AFTER updated_at, | |
| ADD INDEX idx_admin_role (role_id); | |
| INSERT INTO admin_roles (role_name, display_label, description, permissions_json) | |
| VALUES | |
| ('super_admin', 'Super Administrator', 'Full system access including admin management', JSON_OBJECT( | |
| 'admin_management', true, | |
| 'doctor_management', true, | |
| 'patient_management', true, | |
| 'billing_management', true, | |
| 'inventory_management', true, | |
| 'admissions_management', true, | |
| 'audit_logs_view', true, | |
| 'settings_edit', true, | |
| 'analytics_view', true, | |
| 'notifications_send', true, | |
| 'system_configuration', true | |
| )), | |
| ('admin', 'Administrator', 'Can manage doctors, patients, and view analytics', JSON_OBJECT( | |
| 'admin_management', false, | |
| 'doctor_management', true, | |
| 'patient_management', true, | |
| 'billing_management', true, | |
| 'inventory_management', false, | |
| 'admissions_management', true, | |
| 'audit_logs_view', true, | |
| 'settings_edit', false, | |
| 'analytics_view', true, | |
| 'notifications_send', false, | |
| 'system_configuration', false | |
| )), | |
| ('manager', 'Manager', 'Can view reports and manage operations', JSON_OBJECT( | |
| 'admin_management', false, | |
| 'doctor_management', false, | |
| 'patient_management', true, | |
| 'billing_management', true, | |
| 'inventory_management', true, | |
| 'admissions_management', true, | |
| 'audit_logs_view', true, | |
| 'settings_edit', false, | |
| 'analytics_view', true, | |
| 'notifications_send', false, | |
| 'system_configuration', false | |
| )), | |
| ('viewer', 'Viewer', 'Read-only access to dashboards and reports', JSON_OBJECT( | |
| 'admin_management', false, | |
| 'doctor_management', false, | |
| 'patient_management', false, | |
| 'billing_management', false, | |
| 'inventory_management', false, | |
| 'admissions_management', false, | |
| 'audit_logs_view', true, | |
| 'settings_edit', false, | |
| 'analytics_view', true, | |
| 'notifications_send', false, | |
| 'system_configuration', false | |
| )) | |
| ON DUPLICATE KEY UPDATE | |
| display_label = VALUES(display_label), | |
| description = VALUES(description), | |
| permissions_json = VALUES(permissions_json), | |
| is_active = 1; | |
| UPDATE administrators | |
| SET role_id = COALESCE(role_id, 1) | |
| WHERE id = 'ADM001' OR email = 'administrator@carepeople.com'; | |