refactor(frontend) : RBAC - nettoyage UI admin users/roles
Supprime la colonne actions des tables users et roles (la ligne cliquable ouvre deja le drawer). Deplace la suppression d'un role dans le drawer d'edition (bouton danger avec icone, desactive pour les roles systeme). Harmonise les boutons annuler en variant tertiary et ajoute les icones manquantes (plus pour nouveau role, poubelle pour supprimer). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -72,8 +72,7 @@
|
||||
"label": "Libellé",
|
||||
"code": "Code",
|
||||
"permissions": "Permissions",
|
||||
"system": "Système",
|
||||
"actions": "Actions"
|
||||
"system": "Système"
|
||||
},
|
||||
"form": {
|
||||
"label": "Libellé",
|
||||
@@ -103,8 +102,7 @@
|
||||
"username": "Nom d'utilisateur",
|
||||
"admin": "Administrateur",
|
||||
"roles": "Roles",
|
||||
"directPermissions": "Permissions directes",
|
||||
"actions": "Actions"
|
||||
"directPermissions": "Permissions directes"
|
||||
},
|
||||
"drawer": {
|
||||
"title": "Permissions de {username}",
|
||||
|
||||
@@ -22,6 +22,8 @@
|
||||
<MalioButton
|
||||
:label="t('common.delete')"
|
||||
variant="danger"
|
||||
icon-name="mdi:delete-outline"
|
||||
icon-position="left"
|
||||
:disabled="loading"
|
||||
@click="confirm"
|
||||
/>
|
||||
|
||||
@@ -53,8 +53,18 @@
|
||||
<!-- Boutons -->
|
||||
<div class="flex justify-end gap-3 border-t border-neutral-200 pt-4">
|
||||
<MalioButton
|
||||
v-if="isEditMode"
|
||||
:label="t('common.delete')"
|
||||
variant="danger"
|
||||
icon-name="mdi:delete-outline"
|
||||
icon-position="left"
|
||||
:disabled="role?.isSystem"
|
||||
@click="emit('delete')"
|
||||
/>
|
||||
<MalioButton
|
||||
v-else
|
||||
:label="t('common.cancel')"
|
||||
variant="secondary"
|
||||
variant="tertiary"
|
||||
@click="emit('update:modelValue', false)"
|
||||
/>
|
||||
<MalioButton
|
||||
@@ -87,6 +97,7 @@ const props = defineProps<{
|
||||
const emit = defineEmits<{
|
||||
'update:modelValue': [value: boolean]
|
||||
saved: []
|
||||
delete: []
|
||||
}>()
|
||||
|
||||
const saving = ref(false)
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
<div class="flex justify-end gap-3 border-t border-neutral-200 pt-4">
|
||||
<MalioButton
|
||||
:label="t('common.cancel')"
|
||||
variant="secondary"
|
||||
variant="tertiary"
|
||||
@click="emit('update:modelValue', false)"
|
||||
/>
|
||||
<MalioButton
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
v-if="can('core.roles.manage')"
|
||||
:label="t('admin.roles.newRole')"
|
||||
icon-name="mdi:plus"
|
||||
icon-position="left"
|
||||
@click="openCreateDrawer"
|
||||
/>
|
||||
</div>
|
||||
@@ -37,25 +38,6 @@
|
||||
{{ t('admin.roles.table.system') }}
|
||||
</span>
|
||||
</template>
|
||||
<template #cell-actions="{ item }">
|
||||
<div class="flex items-center justify-end gap-2" @click.stop>
|
||||
<MalioButtonIcon
|
||||
v-if="can('core.roles.manage')"
|
||||
icon="mdi:pencil-outline"
|
||||
:aria-label="t('common.edit')"
|
||||
variant="ghost"
|
||||
@click="openEditDrawer(getRoleById(item.id as number)!)"
|
||||
/>
|
||||
<MalioButtonIcon
|
||||
v-if="can('core.roles.manage')"
|
||||
icon="mdi:delete-outline"
|
||||
:aria-label="t('common.delete')"
|
||||
variant="ghost"
|
||||
:disabled="item.isSystem as boolean"
|
||||
@click="confirmDelete(getRoleById(item.id as number)!)"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
</MalioDataTable>
|
||||
|
||||
<!-- Drawer creation/edition -->
|
||||
@@ -63,6 +45,7 @@
|
||||
v-model="drawerOpen"
|
||||
:role="selectedRole"
|
||||
@saved="onRoleSaved"
|
||||
@delete="onDeleteRequest"
|
||||
/>
|
||||
|
||||
<!-- Modale de suppression -->
|
||||
@@ -93,7 +76,6 @@ const columns = [
|
||||
{ key: 'code', label: t('admin.roles.table.code') },
|
||||
{ key: 'permissions', label: t('admin.roles.table.permissions') },
|
||||
{ key: 'system', label: t('admin.roles.table.system') },
|
||||
{ key: 'actions', label: t('admin.roles.table.actions') },
|
||||
]
|
||||
|
||||
// Transformer les roles en items compatibles MalioDataTable
|
||||
@@ -105,7 +87,6 @@ const roleItems = computed(() =>
|
||||
permissions: role.permissions.length,
|
||||
isSystem: role.isSystem,
|
||||
system: '', // colonne geree par le slot
|
||||
actions: '', // colonne geree par le slot
|
||||
}))
|
||||
)
|
||||
|
||||
@@ -148,9 +129,9 @@ function openEditDrawer(role: Role) {
|
||||
drawerOpen.value = true
|
||||
}
|
||||
|
||||
function confirmDelete(role: Role) {
|
||||
if (role.isSystem) return
|
||||
roleToDelete.value = role
|
||||
function onDeleteRequest() {
|
||||
if (!selectedRole.value || selectedRole.value.isSystem) return
|
||||
roleToDelete.value = selectedRole.value
|
||||
deleteModalOpen.value = true
|
||||
}
|
||||
|
||||
@@ -163,6 +144,7 @@ async function handleDelete() {
|
||||
})
|
||||
deleteModalOpen.value = false
|
||||
roleToDelete.value = null
|
||||
drawerOpen.value = false
|
||||
await loadRoles()
|
||||
} finally {
|
||||
deleting.value = false
|
||||
|
||||
@@ -25,17 +25,6 @@
|
||||
{{ t('admin.users.table.admin') }}
|
||||
</span>
|
||||
</template>
|
||||
<template #cell-actions="{ item }">
|
||||
<div class="flex items-center justify-end gap-2" @click.stop>
|
||||
<MalioButtonIcon
|
||||
v-if="canManage"
|
||||
icon="mdi:shield-edit-outline"
|
||||
:aria-label="t('common.edit')"
|
||||
variant="ghost"
|
||||
@click="openDrawer(getUserById(item.id as number)!)"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
</MalioDataTable>
|
||||
|
||||
<!-- Drawer RBAC -->
|
||||
@@ -68,7 +57,6 @@ const columns = [
|
||||
{ key: 'admin', label: t('admin.users.table.admin') },
|
||||
{ key: 'roles', label: t('admin.users.table.roles') },
|
||||
{ key: 'directPermissions', label: t('admin.users.table.directPermissions') },
|
||||
{ key: 'actions', label: t('admin.users.table.actions') },
|
||||
]
|
||||
|
||||
const userItems = computed(() =>
|
||||
@@ -78,7 +66,6 @@ const userItems = computed(() =>
|
||||
admin: user.isAdmin,
|
||||
roles: user.roles.length,
|
||||
directPermissions: user.directPermissions.length,
|
||||
actions: '',
|
||||
}))
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user