refac: DELETE /v1/user/{id}?expected_role_id=N, user.remove audit event, 409 target_role_not_found, GetAll returns its error, Own-scope visibility filter moved into repos, JSON tags removed from use-case types

This commit is contained in:
Florian Sylvain committed 2026-10-29 16:28:25 +01:00
1 parent 5d6f378fce
commit b39a41be88
124 files changed
+8816 -523

No files matched your search

+48 -6
View File
@@ -5,6 +5,7 @@ import DashboardShell from '@/components/DashboardShell.vue'
import PermissionGrid from '@/components/PermissionGrid.vue'
import PermissionGroup from '@/components/PermissionGroup.vue'
import PresetPills from '@/components/PresetPills.vue'
import RoleDifferencesDialog from '@/components/RoleDifferencesDialog.vue'
import RoleNotices from '@/components/RoleNotices.vue'
import RolePreview from '@/components/RolePreview.vue'
import RoleSaveBar from '@/components/RoleSaveBar.vue'
@@ -92,7 +93,19 @@ onMounted(editor.load)
</script>
<template>
<DashboardShell>
<DashboardShell compact-padding>
<template #breadcrumb>
<UBreadcrumb
:items="[
{ label: t('Settings') },
{ label: t('Roles'), to: '/settings/roles' },
{ label: title },
]"
color="neutral"
class="hidden lg:block"
:ui="{ link: 'text-sm font-medium' }"
/>
</template>
<div
v-if="editor.loadState.value === 'loading'"
class="flex flex-col gap-3"
@@ -177,14 +190,14 @@ onMounted(editor.load)
:reason="editor.readOnlyReason.value"
:conflict="editor.conflict.value"
:refusal="editor.refusal.value"
:save-failed="editor.saveFailed.value"
:can-duplicate="canDuplicate"
:warn-members="warnMembers"
:reviewing="editor.reviewing.value"
:differences="editor.differenceRows.value"
@duplicate="editor.duplicate"
@reload-role="editor.reloadRole"
@reload-page="editor.reloadPage"
@review="editor.toggleReview"
@review="editor.openReview"
@retry-save="editor.save"
/>
<div class="grid gap-6 lg:grid-cols-[minmax(0,1fr)_22rem]">
@@ -218,7 +231,7 @@ onMounted(editor.load)
</UFormField>
</section>
<section class="flex flex-col gap-3">
<section class="flex flex-col gap-3 border border-default bg-default p-4">
<div class="flex flex-col gap-0.5">
<h2 class="text-base font-semibold text-highlighted">
{{ t('Content permissions') }}
@@ -246,9 +259,27 @@ onMounted(editor.load)
@change="editor.changeCell"
@reset="editor.resetType"
/>
<UAlert
v-if="editor.readsOwn.value"
color="info"
variant="soft"
icon="i-lucide-info"
:close="false"
:title="t('Read: Own')"
:description="
t(
'Articles show online articles plus the person\'s own drafts. Custom content types show only entries the person created. Status counts follow the same rule.',
)
"
:ui="{
root: 'items-start gap-2.5 px-3.5 py-3',
title: 'font-semibold',
description: 'text-toned',
}"
/>
</section>
<section class="flex flex-col gap-3">
<section class="flex flex-col gap-3 border border-default bg-default p-4">
<div class="flex flex-wrap items-end justify-between gap-2">
<div class="flex flex-col gap-0.5">
<h2 class="text-base font-semibold text-highlighted">
@@ -318,6 +349,17 @@ onMounted(editor.load)
/>
</div>
<RoleDifferencesDialog
v-if="editor.conflict.value"
:open="editor.reviewing.value"
:description="editor.conflictSummary.value"
:rows="editor.differenceRows.value"
:pending="editor.keeping.value"
@update:open="(value: boolean) => !value && editor.closeReview()"
@use-saved="editor.reloadRole"
@keep-edits="editor.keepEdits"
/>
<RolePreview
v-if="!isDesktop"
v-model:open="sheetOpen"