diff --git a/src/core/users/README.md b/src/core/users/README.md index 2101959..f7efd85 100644 --- a/src/core/users/README.md +++ b/src/core/users/README.md @@ -214,7 +214,7 @@ await assignUserRole(userId, roleId); await revokeUserRole(userId, roleId); ``` -Les rôles système (`is_system = true`) ne peuvent pas être modifiés ni supprimés. +Les rôles système (`is_system = true`) peuvent être renommés mais leurs permissions ne peuvent pas être modifiées. Ils ne peuvent pas être supprimés. --- diff --git a/src/core/users/roles.js b/src/core/users/roles.js index 1c6011a..1b712c4 100644 --- a/src/core/users/roles.js +++ b/src/core/users/roles.js @@ -54,15 +54,13 @@ export async function updateRole(roleId, { name, description, color, permissionK if (role.rows.length === 0) throw new Error('Role not found'); const isSystem = role.rows[0].is_system; - if (isSystem) throw new Error('Cannot update a system role'); return transaction(async (client) => { const updateFields = []; const values = []; let idx = 1; - // System roles cannot be renamed - if (!isSystem && name !== undefined) { + if (name !== undefined) { if (!name.trim()) throw new Error('Role name cannot be empty'); updateFields.push(`name = $${idx++}`); values.push(name.trim()); @@ -84,7 +82,7 @@ export async function updateRole(roleId, { name, description, color, permissionK values ); - if (permissionKeys !== undefined) { + if (!isSystem && permissionKeys !== undefined) { const safeKeys = [...new Set(permissionKeys)].filter(k => VALID_PERMISSION_KEYS.has(k)); await client.query(`DELETE FROM zen_auth_role_permissions WHERE role_id = $1`, [roleId]); for (const key of safeKeys) { diff --git a/src/features/admin/components/RoleEditModal.client.js b/src/features/admin/components/RoleEditModal.client.js index d78aaa4..e4dfe2d 100644 --- a/src/features/admin/components/RoleEditModal.client.js +++ b/src/features/admin/components/RoleEditModal.client.js @@ -125,7 +125,6 @@ const RoleEditModal = ({ roleId, isOpen, onClose, onSaved }) => { label="Nom du rôle" value={name} onChange={setName} - disabled={isSystem} placeholder="Éditeur, Modérateur..." required /> @@ -162,6 +161,7 @@ const RoleEditModal = ({ roleId, isOpen, onClose, onSaved }) => { onChange={() => togglePerm(perm.key)} label={perm.name} description={perm.description} + disabled={isSystem} /> ))} diff --git a/src/features/admin/pages/RolesPage.client.js b/src/features/admin/pages/RolesPage.client.js index 7abd948..e4c031f 100644 --- a/src/features/admin/pages/RolesPage.client.js +++ b/src/features/admin/pages/RolesPage.client.js @@ -81,15 +81,13 @@ const RolesPageClient = ({ canManage }) => { align: 'right', render: (role) => (
- {!role.is_system && ( - - )} + {!role.is_system && (