chore: import DH V2 D5.6.4 production baseline
This commit is contained in:
@@ -0,0 +1,137 @@
|
||||
import { MigrationInterface, QueryRunner } from 'typeorm';
|
||||
|
||||
const permissionCodes = [
|
||||
'dashboard.read',
|
||||
'users.read',
|
||||
'users.create',
|
||||
'users.update',
|
||||
'users.change_status',
|
||||
'users.assign_roles',
|
||||
'roles.read',
|
||||
'roles.manage',
|
||||
'audit.read',
|
||||
] as const;
|
||||
|
||||
const roleCodes = [
|
||||
'admin',
|
||||
'director',
|
||||
'supervisor',
|
||||
'inspector',
|
||||
'auditor',
|
||||
] as const;
|
||||
|
||||
const rolePermissionValues = `
|
||||
('admin', 'dashboard.read'),
|
||||
('admin', 'users.read'),
|
||||
('admin', 'users.create'),
|
||||
('admin', 'users.update'),
|
||||
('admin', 'users.change_status'),
|
||||
('admin', 'users.assign_roles'),
|
||||
('admin', 'roles.read'),
|
||||
('admin', 'roles.manage'),
|
||||
('admin', 'audit.read'),
|
||||
('director', 'dashboard.read'),
|
||||
('director', 'users.read'),
|
||||
('director', 'roles.read'),
|
||||
('director', 'audit.read'),
|
||||
('supervisor', 'dashboard.read'),
|
||||
('supervisor', 'users.read'),
|
||||
('supervisor', 'roles.read'),
|
||||
('inspector', 'dashboard.read'),
|
||||
('inspector', 'roles.read'),
|
||||
('auditor', 'dashboard.read'),
|
||||
('auditor', 'roles.read'),
|
||||
('auditor', 'audit.read')
|
||||
`;
|
||||
|
||||
export class PhaseASeedRolesPermissions1786548003000
|
||||
implements MigrationInterface
|
||||
{
|
||||
name = 'PhaseASeedRolesPermissions1786548003000';
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`
|
||||
INSERT INTO permissions (code, description)
|
||||
VALUES
|
||||
('dashboard.read', 'Ver el panel general'),
|
||||
('users.read', 'Listar y consultar usuarios'),
|
||||
('users.create', 'Crear usuarios'),
|
||||
('users.update', 'Editar usuarios'),
|
||||
('users.change_status', 'Activar o desactivar usuarios'),
|
||||
('users.assign_roles', 'Asignar roles a usuarios'),
|
||||
('roles.read', 'Listar y consultar roles y permisos'),
|
||||
('roles.manage', 'Administrar roles y su matriz de permisos'),
|
||||
('audit.read', 'Consultar eventos de auditoría')
|
||||
ON CONFLICT (code) DO UPDATE
|
||||
SET description = EXCLUDED.description
|
||||
`);
|
||||
|
||||
await queryRunner.query(`
|
||||
INSERT INTO roles (code, name, description, is_system)
|
||||
VALUES
|
||||
('admin', 'Administrador', 'Administración total del sistema', true),
|
||||
('director', 'Director', 'Consulta directiva y auditoría', true),
|
||||
('supervisor', 'Supervisor', 'Supervisión operativa', true),
|
||||
('inspector', 'Inspector', 'Operación de inspecciones', true),
|
||||
('auditor', 'Auditor', 'Consulta de información y auditoría', true)
|
||||
ON CONFLICT (code) DO UPDATE
|
||||
SET
|
||||
name = EXCLUDED.name,
|
||||
description = EXCLUDED.description,
|
||||
is_system = true,
|
||||
updated_at = CURRENT_TIMESTAMP
|
||||
`);
|
||||
|
||||
await queryRunner.query(`
|
||||
WITH mapping(role_code, permission_code) AS (
|
||||
VALUES ${rolePermissionValues}
|
||||
)
|
||||
INSERT INTO role_permissions (role_id, permission_id)
|
||||
SELECT role.id, permission.id
|
||||
FROM mapping
|
||||
INNER JOIN roles role ON role.code = mapping.role_code
|
||||
INNER JOIN permissions permission
|
||||
ON permission.code = mapping.permission_code
|
||||
ON CONFLICT (role_id, permission_id) DO NOTHING
|
||||
`);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`
|
||||
WITH mapping(role_code, permission_code) AS (
|
||||
VALUES ${rolePermissionValues}
|
||||
)
|
||||
DELETE FROM role_permissions role_permission
|
||||
USING roles role, permissions permission, mapping
|
||||
WHERE role_permission.role_id = role.id
|
||||
AND role_permission.permission_id = permission.id
|
||||
AND role.code = mapping.role_code
|
||||
AND permission.code = mapping.permission_code
|
||||
`);
|
||||
|
||||
await queryRunner.query(
|
||||
`
|
||||
DELETE FROM roles role
|
||||
WHERE role.code = ANY($1::varchar[])
|
||||
AND role.is_system = true
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM user_roles user_role WHERE user_role.role_id = role.id
|
||||
)
|
||||
`,
|
||||
[roleCodes],
|
||||
);
|
||||
|
||||
await queryRunner.query(
|
||||
`
|
||||
DELETE FROM permissions permission
|
||||
WHERE permission.code = ANY($1::varchar[])
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM role_permissions role_permission
|
||||
WHERE role_permission.permission_id = permission.id
|
||||
)
|
||||
`,
|
||||
[permissionCodes],
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user