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

90 lines
4.4 KiB
SQL

-- Script de migration pour synchroniser la base de données de production
-- avec le schéma de développement pour les catégories et permissions
-- 1. Mettre à jour les catégories en français
UPDATE permissions SET category = 'calendrier' WHERE category = 'Calendar';
UPDATE permissions SET category = 'tableau_de_bord' WHERE category = 'Dashboard';
UPDATE permissions SET category = 'livraisons' WHERE category = 'Deliveries';
UPDATE permissions SET category = 'commandes' WHERE category = 'Orders';
UPDATE permissions SET category = 'publicites' WHERE category = 'Publicities';
UPDATE permissions SET category = 'rapprochement' WHERE category = 'Reconciliation';
UPDATE permissions SET category = 'fournisseurs' WHERE category = 'Suppliers';
UPDATE permissions SET category = 'utilisateurs' WHERE category = 'Users';
UPDATE permissions SET category = 'commandes_clients' WHERE category = 'customer_orders';
UPDATE permissions SET category = 'magasins' WHERE category = 'groups';
-- 2. Ajouter les permissions tâches manquantes
INSERT INTO permissions (name, display_name, description, category, action, resource, is_system, created_at) VALUES
('tasks_read', 'Voir tâches', 'Accès en lecture aux tâches', 'gestion_taches', 'read', 'tasks', true, NOW()),
('tasks_create', 'Créer tâches', 'Création de nouvelles tâches', 'gestion_taches', 'create', 'tasks', true, NOW()),
('tasks_update', 'Modifier tâches', 'Modification de tâches existantes', 'gestion_taches', 'update', 'tasks', true, NOW()),
('tasks_delete', 'Supprimer tâches', 'Suppression de tâches', 'gestion_taches', 'delete', 'tasks', true, NOW()),
('tasks_assign', 'Assigner tâches', 'Attribution de tâches aux utilisateurs', 'gestion_taches', 'assign', 'tasks', true, NOW())
ON CONFLICT (name) DO UPDATE SET
display_name = EXCLUDED.display_name,
description = EXCLUDED.description,
category = EXCLUDED.category,
action = EXCLUDED.action,
resource = EXCLUDED.resource;
-- 3. Ajouter les permissions administration manquantes
INSERT INTO permissions (name, display_name, description, category, action, resource, is_system, created_at) VALUES
('system_admin', 'Administration système', 'Accès complet à l''administration du système', 'administration', 'admin', 'system', true, NOW()),
('nocodb_config', 'Configuration NocoDB', 'Gestion de la configuration NocoDB', 'administration', 'config', 'nocodb', true, NOW())
ON CONFLICT (name) DO UPDATE SET
display_name = EXCLUDED.display_name,
description = EXCLUDED.description,
category = EXCLUDED.category,
action = EXCLUDED.action,
resource = EXCLUDED.resource;
-- 4. Assigner les permissions tâches aux rôles existants
WITH task_permissions AS (
SELECT id FROM permissions WHERE category = 'gestion_taches'
),
roles_info AS (
SELECT id, name FROM roles WHERE name IN ('admin', 'manager', 'employee', 'directeur')
)
INSERT INTO role_permissions (role_id, permission_id, created_at)
SELECT r.id, p.id, NOW()
FROM roles_info r
CROSS JOIN task_permissions p
WHERE
-- Admin et directeur ont toutes les permissions tâches
(r.name IN ('admin', 'directeur'))
OR
-- Manager a read, create, update, assign
(r.name = 'manager' AND EXISTS(SELECT 1 FROM permissions WHERE id = p.id AND name IN ('tasks_read', 'tasks_create', 'tasks_update', 'tasks_assign')))
OR
-- Employee a read, create, update
(r.name = 'employee' AND EXISTS(SELECT 1 FROM permissions WHERE id = p.id AND name IN ('tasks_read', 'tasks_create', 'tasks_update')))
ON CONFLICT (role_id, permission_id) DO NOTHING;
-- 5. Assigner les permissions administration aux administrateurs et directeurs
WITH admin_permissions AS (
SELECT id FROM permissions WHERE category = 'administration'
),
admin_roles AS (
SELECT id FROM roles WHERE name IN ('admin', 'directeur')
)
INSERT INTO role_permissions (role_id, permission_id, created_at)
SELECT r.id, p.id, NOW()
FROM admin_roles r
CROSS JOIN admin_permissions p
ON CONFLICT (role_id, permission_id) DO NOTHING;
-- Vérification des résultats
SELECT 'VERIFICATION - Catégories mises à jour:' as check_type, category, COUNT(*) as count
FROM permissions
GROUP BY category
ORDER BY category;
SELECT 'VERIFICATION - Permissions tâches:' as check_type, name, display_name, category
FROM permissions
WHERE category = 'gestion_taches'
ORDER BY name;
SELECT 'VERIFICATION - Permissions administration:' as check_type, name, display_name, category
FROM permissions
WHERE category = 'administration'
ORDER BY name;