Capstone / database /migrate-add-admin-roles.sql
MisbahKhan0009
feat: Implement doctor availability and appointment limits
d63e0c0
Raw
History Blame Contribute Delete
3.03 kB
-- 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';