refactor(core) : reponse aux retours de review
- extrait PermissionAccordion (modules/core/components) : source unique pour l'accordeon de permissions par module, utilise par RoleDrawer et UserRbacDrawer (supprime la duplication selectedCountFor/directSelectedCount + ~25 lignes de markup) - expose le type PermissionModule dans shared/types/rbac - audit-log : simplifie toggleEntity (filter au lieu de Set, valeurs uniques par construction) - default.vue : commente les valeurs en dur (232/170/47) comme issues de la maquette Figma - audit-log : corrige iconSize -> icon-size (warning eslint vue/attribute-hyphenation)
This commit is contained in:
@@ -66,39 +66,14 @@
|
||||
<div v-if="permissionsByModule.length === 0" class="text-sm text-neutral-400">
|
||||
{{ t('admin.roles.permissions.noPermissions') }}
|
||||
</div>
|
||||
<!-- Un panneau d'accordeon par module (mode multiple) ; le compteur
|
||||
selectionnees/total reste visible dans l'en-tete replie. -->
|
||||
<MalioAccordion v-else v-model="openDirectModules">
|
||||
<MalioAccordionItem
|
||||
v-for="group in permissionsByModule"
|
||||
:key="group.module"
|
||||
:value="group.module"
|
||||
:title="`${group.module} (${directSelectedCount(group)}/${group.permissions.length})`"
|
||||
header-class="capitalize"
|
||||
>
|
||||
<div class="flex flex-col gap-3">
|
||||
<!-- Tout selectionner pour ce module -->
|
||||
<MalioCheckbox
|
||||
:id="`direct-group-${group.module}`"
|
||||
:label="t('admin.roles.permissions.selectAll')"
|
||||
:model-value="directAllSelected(group)"
|
||||
label-class="font-semibold text-sm text-neutral-700"
|
||||
@update:model-value="(val: boolean) => handleToggleAll(group.module, val)"
|
||||
/>
|
||||
<div class="flex flex-col gap-2">
|
||||
<MalioCheckbox
|
||||
v-for="perm in group.permissions"
|
||||
:id="`direct-perm-${perm.id}`"
|
||||
:key="perm.id"
|
||||
:label="perm.label"
|
||||
:model-value="selectedDirectPermissionIds.has(perm.id)"
|
||||
label-class="text-sm text-neutral-600"
|
||||
@update:model-value="(val: boolean) => handleTogglePermission(perm.id, val)"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</MalioAccordionItem>
|
||||
</MalioAccordion>
|
||||
<PermissionAccordion
|
||||
v-else
|
||||
:groups-by-module="permissionsByModule"
|
||||
:selected-ids="selectedDirectPermissionIds"
|
||||
id-prefix="direct"
|
||||
@toggle="handleTogglePermission"
|
||||
@toggle-all="handleToggleAll"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<!-- Section Sites autorises (ticket 2 module Sites) -->
|
||||
@@ -153,14 +128,9 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import type { Permission, Role, UserListItem, UserRbacDetail, EffectivePermission } from '~/shared/types/rbac'
|
||||
import type { Permission, PermissionModule, Role, UserListItem, UserRbacDetail, EffectivePermission } from '~/shared/types/rbac'
|
||||
import type { Site } from '~/shared/types/sites'
|
||||
|
||||
interface PermissionModule {
|
||||
module: string
|
||||
permissions: Permission[]
|
||||
}
|
||||
|
||||
const { t } = useI18n()
|
||||
const api = useApi()
|
||||
const auth = useAuthStore()
|
||||
@@ -189,19 +159,6 @@ const selectedRoleIds = ref(new Set<number>())
|
||||
const selectedDirectPermissionIds = ref(new Set<number>())
|
||||
const selectedSiteIds = ref(new Set<number>())
|
||||
|
||||
// Modules ouverts dans l'accordeon des permissions directes (mode multiple)
|
||||
const openDirectModules = ref<string[]>([])
|
||||
|
||||
// Nombre de permissions directes selectionnees pour un module donne
|
||||
function directSelectedCount(group: PermissionModule): number {
|
||||
return group.permissions.filter(p => selectedDirectPermissionIds.value.has(p.id)).length
|
||||
}
|
||||
|
||||
// Vrai si toutes les permissions directes du module sont selectionnees
|
||||
function directAllSelected(group: PermissionModule): boolean {
|
||||
return group.permissions.length > 0 && directSelectedCount(group) === group.permissions.length
|
||||
}
|
||||
|
||||
// Detecter l'auto-edition
|
||||
const isSelfEdit = computed(() => props.user?.id === auth.user?.id)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user