mirror of
https://github.com/R0m1k3/LogiFlow.git
synced 2026-10-11 17:27:31 +02:00
122 lines
5.2 KiB
SQL
122 lines
5.2 KiB
SQL
-- Script SQL d'urgence pour corriger les permissions tâches en production
|
|
-- À exécuter manuellement sur la base de données de production
|
|
|
|
-- 1. Vérifier si les permissions tâches existent
|
|
DO $$
|
|
BEGIN
|
|
-- Créer les permissions tâches si elles n'existent pas
|
|
INSERT INTO permissions (name, display_name, description, category, action, resource, is_system)
|
|
VALUES
|
|
('tasks_read', 'Voir tâches', 'Accès en lecture aux tâches', 'gestion_taches', 'read', 'tasks', true),
|
|
('tasks_create', 'Créer tâches', 'Création de nouvelles tâches', 'gestion_taches', 'create', 'tasks', true),
|
|
('tasks_update', 'Modifier tâches', 'Modification des tâches existantes', 'gestion_taches', 'update', 'tasks', true),
|
|
('tasks_delete', 'Supprimer tâches', 'Suppression des tâches', 'gestion_taches', 'delete', 'tasks', true),
|
|
('tasks_assign', 'Assigner tâches', 'Assignation des tâches aux utilisateurs', 'gestion_taches', 'assign', 'tasks', true)
|
|
ON CONFLICT (name) DO UPDATE SET
|
|
display_name = EXCLUDED.display_name,
|
|
description = EXCLUDED.description,
|
|
category = EXCLUDED.category;
|
|
|
|
RAISE NOTICE 'Permissions tâches créées/mises à jour avec succès';
|
|
END $$;
|
|
|
|
-- 2. Assigner les permissions aux rôles appropriés
|
|
DO $$
|
|
DECLARE
|
|
admin_role_id INTEGER;
|
|
manager_role_id INTEGER;
|
|
employee_role_id INTEGER;
|
|
directeur_role_id INTEGER;
|
|
perm_read_id INTEGER;
|
|
perm_create_id INTEGER;
|
|
perm_update_id INTEGER;
|
|
perm_delete_id INTEGER;
|
|
perm_assign_id INTEGER;
|
|
BEGIN
|
|
-- Récupérer les IDs des rôles
|
|
SELECT id INTO admin_role_id FROM roles WHERE name = 'admin';
|
|
SELECT id INTO manager_role_id FROM roles WHERE name = 'manager';
|
|
SELECT id INTO employee_role_id FROM roles WHERE name = 'employee';
|
|
SELECT id INTO directeur_role_id FROM roles WHERE name = 'directeur';
|
|
|
|
-- Récupérer les IDs des permissions tâches
|
|
SELECT id INTO perm_read_id FROM permissions WHERE name = 'tasks_read';
|
|
SELECT id INTO perm_create_id FROM permissions WHERE name = 'tasks_create';
|
|
SELECT id INTO perm_update_id FROM permissions WHERE name = 'tasks_update';
|
|
SELECT id INTO perm_delete_id FROM permissions WHERE name = 'tasks_delete';
|
|
SELECT id INTO perm_assign_id FROM permissions WHERE name = 'tasks_assign';
|
|
|
|
-- Assigner toutes les permissions tâches au rôle admin
|
|
IF admin_role_id IS NOT NULL THEN
|
|
INSERT INTO role_permissions (role_id, permission_id)
|
|
VALUES
|
|
(admin_role_id, perm_read_id),
|
|
(admin_role_id, perm_create_id),
|
|
(admin_role_id, perm_update_id),
|
|
(admin_role_id, perm_delete_id),
|
|
(admin_role_id, perm_assign_id)
|
|
ON CONFLICT (role_id, permission_id) DO NOTHING;
|
|
RAISE NOTICE 'Permissions tâches assignées au rôle admin (ID: %)', admin_role_id;
|
|
END IF;
|
|
|
|
-- Assigner permissions au rôle manager (read, create, update, assign)
|
|
IF manager_role_id IS NOT NULL THEN
|
|
INSERT INTO role_permissions (role_id, permission_id)
|
|
VALUES
|
|
(manager_role_id, perm_read_id),
|
|
(manager_role_id, perm_create_id),
|
|
(manager_role_id, perm_update_id),
|
|
(manager_role_id, perm_assign_id)
|
|
ON CONFLICT (role_id, permission_id) DO NOTHING;
|
|
RAISE NOTICE 'Permissions tâches assignées au rôle manager (ID: %)', manager_role_id;
|
|
END IF;
|
|
|
|
-- Assigner permissions au rôle employee (read, create, update)
|
|
IF employee_role_id IS NOT NULL THEN
|
|
INSERT INTO role_permissions (role_id, permission_id)
|
|
VALUES
|
|
(employee_role_id, perm_read_id),
|
|
(employee_role_id, perm_create_id),
|
|
(employee_role_id, perm_update_id)
|
|
ON CONFLICT (role_id, permission_id) DO NOTHING;
|
|
RAISE NOTICE 'Permissions tâches assignées au rôle employee (ID: %)', employee_role_id;
|
|
END IF;
|
|
|
|
-- Assigner toutes les permissions au rôle directeur
|
|
IF directeur_role_id IS NOT NULL THEN
|
|
INSERT INTO role_permissions (role_id, permission_id)
|
|
VALUES
|
|
(directeur_role_id, perm_read_id),
|
|
(directeur_role_id, perm_create_id),
|
|
(directeur_role_id, perm_update_id),
|
|
(directeur_role_id, perm_delete_id),
|
|
(directeur_role_id, perm_assign_id)
|
|
ON CONFLICT (role_id, permission_id) DO NOTHING;
|
|
RAISE NOTICE 'Permissions tâches assignées au rôle directeur (ID: %)', directeur_role_id;
|
|
END IF;
|
|
|
|
END $$;
|
|
|
|
-- 3. Vérifier le résultat
|
|
SELECT
|
|
r.name as role_name,
|
|
COUNT(rp.permission_id) as task_permissions_count
|
|
FROM roles r
|
|
LEFT JOIN role_permissions rp ON r.id = rp.role_id
|
|
LEFT JOIN permissions p ON rp.permission_id = p.id AND p.category = 'gestion_taches'
|
|
WHERE r.name IN ('admin', 'manager', 'employee', 'directeur')
|
|
GROUP BY r.id, r.name
|
|
ORDER BY r.name;
|
|
|
|
-- 4. Afficher toutes les permissions tâches pour vérification
|
|
SELECT
|
|
p.id,
|
|
p.name,
|
|
p.display_name,
|
|
p.category,
|
|
COUNT(rp.role_id) as assigned_to_roles_count
|
|
FROM permissions p
|
|
LEFT JOIN role_permissions rp ON p.id = rp.permission_id
|
|
WHERE p.category = 'gestion_taches'
|
|
GROUP BY p.id, p.name, p.display_name, p.category
|
|
ORDER BY p.name; |