up
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
-- ============================================================
|
||||
-- Migración: Sistema de Roles y Módulos
|
||||
-- Fecha: 2026-03-04
|
||||
-- Descripción: Crea tablas roles y role_modules; vincula admin_users
|
||||
-- ============================================================
|
||||
|
||||
-- ── 1. Tabla de roles ────────────────────────────────────────
|
||||
CREATE TABLE IF NOT EXISTS `roles` (
|
||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||
`name` VARCHAR(100) NOT NULL COMMENT 'Nombre legible del rol',
|
||||
`slug` VARCHAR(50) NOT NULL COMMENT 'Clave interna (enfermero, admin, …)',
|
||||
`description` TEXT DEFAULT NULL,
|
||||
`color` VARCHAR(20) DEFAULT '#6c757d' COMMENT 'Color HEX para la UI',
|
||||
`is_system` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '1 = no se puede eliminar',
|
||||
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_slug` (`slug`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- ── 2. Tabla de módulos asignados por rol ────────────────────
|
||||
-- Cada fila «activa» el módulo para ese rol.
|
||||
CREATE TABLE IF NOT EXISTS `role_modules` (
|
||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||
`role_id` INT(11) NOT NULL,
|
||||
`module_slug` VARCHAR(100) NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_role_module` (`role_id`, `module_slug`),
|
||||
CONSTRAINT `fk_rm_role` FOREIGN KEY (`role_id`)
|
||||
REFERENCES `roles`(`id`) ON DELETE CASCADE ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- ── 3. Vincular admin_users con roles ────────────────────────
|
||||
-- (Se ignora si la columna ya existe - compatible MySQL y MariaDB)
|
||||
ALTER TABLE `admin_users`
|
||||
ADD COLUMN `role_id` INT(11) NULL DEFAULT NULL
|
||||
COMMENT 'FK a roles.id';
|
||||
|
||||
ALTER TABLE `admin_users`
|
||||
ADD INDEX `idx_role_id` (`role_id`);
|
||||
|
||||
-- ── 4. Roles del sistema (no borrables) ─────────────────────
|
||||
INSERT IGNORE INTO `roles` (`id`, `name`, `slug`, `description`, `color`, `is_system`) VALUES
|
||||
(1, 'Administrador', 'admin', 'Acceso completo a todos los módulos', '#0d6efd', 1),
|
||||
(2, 'Enfermero', 'enfermero', 'Solo portal de domicilios asignados y formularios','#6f42c1', 1);
|
||||
|
||||
-- ── 5. Módulos para el rol Administrador (todos) ─────────────
|
||||
INSERT IGNORE INTO `role_modules` (`role_id`, `module_slug`) VALUES
|
||||
(1, 'whatsapp'),
|
||||
(1, 'lab_dashboard'),
|
||||
(1, 'lab_ordenes'),
|
||||
(1, 'lab_pacientes'),
|
||||
(1, 'lab_domicilios'),
|
||||
(1, 'lab_enfermeras'),
|
||||
(1, 'lab_formularios'),
|
||||
(1, 'lab_reportes'),
|
||||
(1, 'lab_configuracion'),
|
||||
(1, 'usuarios');
|
||||
|
||||
-- ── 6. Módulos para el rol Enfermero ────────────────────────
|
||||
INSERT IGNORE INTO `role_modules` (`role_id`, `module_slug`) VALUES
|
||||
(2, 'enfermero_portal'),
|
||||
(2, 'lab_formularios');
|
||||
|
||||
-- ── 7. Vincular usuarios existentes con su role_id ───────────
|
||||
UPDATE `admin_users` SET `role_id` = 1 WHERE `role` = 'admin' AND `role_id` IS NULL;
|
||||
UPDATE `admin_users` SET `role_id` = 2 WHERE `role` = 'enfermero' AND `role_id` IS NULL;
|
||||
-- Si algún usuario no tiene rol asignado, asignarle admin por defecto
|
||||
UPDATE `admin_users` SET `role_id` = 1 WHERE `role_id` IS NULL;
|
||||
|
||||
-- ── 8. FK suave (solo si FK no existe aún) ──────────────────
|
||||
-- (MariaDB/MySQL no tiene ADD CONSTRAINT IF NOT EXISTS, usamos el IGNORE del INSERT)
|
||||
-- La FK se omite intencionalmente para no bloquear si ya existe;
|
||||
-- conéctala manualmente si el motor lo permite:
|
||||
-- ALTER TABLE admin_users ADD CONSTRAINT fk_au_role FOREIGN KEY (role_id) REFERENCES roles(id);
|
||||
Reference in New Issue
Block a user