From d68043c33681f9edbb1eaecb0ff9837918bef9e2 Mon Sep 17 00:00:00 2001 From: michaelschal <35957947-michaelschal@users.noreply.replit.com> Date: Wed, 13 Aug 2025 21:06:52 +0000 Subject: [PATCH] Grant admins access to manage backup pages and features Update permissions to allow 'admin' role access to the 'backups' module, enabling management operations, and modify the BackupManager component to reflect this new permission check. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 7c468936-2a88-4686-ac0a-84921a45222d Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/7c468936-2a88-4686-ac0a-84921a45222d/2HHgup2 --- attached_assets/image_1755119115097.png | Bin 0 -> 9225 bytes client/src/lib/permissions.ts | 20 +++++++++++++++++++- client/src/pages/BackupManager.tsx | 4 ++-- 3 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 attached_assets/image_1755119115097.png diff --git a/attached_assets/image_1755119115097.png b/attached_assets/image_1755119115097.png new file mode 100644 index 0000000000000000000000000000000000000000..c0cb20f7ac8e8f8f8adee8229ed65ee75564cead GIT binary patch literal 9225 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 literal 0 HcmV?d00001 diff --git a/client/src/lib/permissions.ts b/client/src/lib/permissions.ts index 00af99a..0cc6513 100644 --- a/client/src/lib/permissions.ts +++ b/client/src/lib/permissions.ts @@ -12,7 +12,9 @@ export type Module = | 'publicity' | 'customer-orders' | 'dlc' - | 'tasks'; + | 'tasks' + | 'admin' + | 'backups'; // Définition des permissions par module et par rôle const PERMISSIONS: Record> = { @@ -86,6 +88,22 @@ const PERMISSIONS: Record> = { directeur: ['view', 'create', 'edit', 'delete', 'validate'], manager: ['view', 'validate'], employee: ['view'] + }, + + // Administration générale - Admin seulement + admin: { + admin: ['view', 'create', 'edit', 'delete', 'manage'], + directeur: [], + manager: [], + employee: [] + }, + + // Sauvegardes - Admin seulement + backups: { + admin: ['view', 'create', 'edit', 'delete', 'manage'], + directeur: [], + manager: [], + employee: [] } }; diff --git a/client/src/pages/BackupManager.tsx b/client/src/pages/BackupManager.tsx index d80fdb1..f1146da 100644 --- a/client/src/pages/BackupManager.tsx +++ b/client/src/pages/BackupManager.tsx @@ -39,8 +39,8 @@ export default function BackupManager() { const queryClient = useQueryClient(); const [deletingBackup, setDeletingBackup] = useState(null); - // Check permissions - const canManageBackups = hasPermission(user?.role || '', 'admin', 'manage'); + // Check permissions - Seulement les admins peuvent gérer les sauvegardes + const canManageBackups = hasPermission(user?.role || '', 'backups', 'manage'); // Fetch backup list const { data: backups = [], isLoading, error } = useQuery({