Files
LogiFlow/fix-production-tasks-permissions.sql
T
2025-08-11 14:43:48 +00:00

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;