fix(users): viewer-Rolle — Add/Edit/Delete/Set-PW/Active-Toggle deaktivieren

Users-Seite fehlte `isViewer` komplett: Viewer sahen alle Mutations-
Controls aktiv und bekamen erst nach dem Klick einen Backend-403.
Jetzt: „Benutzer hinzufügen"-Button + KeyOutlined-Set-PW-Button +
Active-Switch tragen `disabled={isViewer}`, ActionButtons-Pair liest
isViewer schon intern aus dem Auth-Store.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Debian
2026-05-28 10:27:12 +02:00
parent 192384c448
commit 44f184d505
5 changed files with 26 additions and 19 deletions

View File

@@ -41,6 +41,7 @@ export default function UsersPage() {
const { t } = useTranslation()
const qc = useQueryClient()
const me = useAuthStore((s) => s.user)
const isViewer = me?.role === 'viewer'
const { data: users, isLoading } = useQuery({ queryKey: ['users'], queryFn: listUsers })
@@ -109,6 +110,7 @@ export default function UsersPage() {
<Switch
size="small"
checked={v}
disabled={isViewer}
loading={quickToggle.isPending && quickToggle.variables?.id === row.id}
onChange={(checked) => quickToggle.mutate({ id: row.id, row, checked })}
/>
@@ -128,8 +130,9 @@ export default function UsersPage() {
title: t('common.actions'), key: 'actions', width: 120,
render: (_, row) => (
<Space size={4}>
<Tooltip title={t('users.setPassword')}>
<Tooltip title={isViewer ? t('auth.viewerBadge') : t('users.setPassword')}>
<Button type="text" size="small" icon={<KeyOutlined />}
disabled={isViewer}
onClick={() => { setPwTarget(row); pwForm.resetFields() }} />
</Tooltip>
<ActionButtons
@@ -159,13 +162,15 @@ export default function UsersPage() {
dataSource={users ?? []}
columns={columns}
extraActions={
<Button type="primary" icon={<PlusOutlined />} onClick={() => {
setCreating(true)
createForm.resetFields()
createForm.setFieldsValue({ role: 'admin', active: true })
}}>
{t('users.addUser')}
</Button>
<Tooltip title={isViewer ? t('auth.viewerBadge') : undefined}>
<Button type="primary" icon={<PlusOutlined />} disabled={isViewer} onClick={() => {
setCreating(true)
createForm.resetFields()
createForm.setFieldsValue({ role: 'admin', active: true })
}}>
{t('users.addUser')}
</Button>
</Tooltip>
}
emptyContent={
<EmptyState
@@ -173,13 +178,15 @@ export default function UsersPage() {
title={t('users.emptyTitle')}
description={t('users.emptyDesc')}
action={
<Button type="primary" icon={<PlusOutlined />} onClick={() => {
setCreating(true)
createForm.resetFields()
createForm.setFieldsValue({ role: 'admin', active: true })
}}>
{t('users.addUser')}
</Button>
<Tooltip title={isViewer ? t('auth.viewerBadge') : undefined}>
<Button type="primary" icon={<PlusOutlined />} disabled={isViewer} onClick={() => {
setCreating(true)
createForm.resetFields()
createForm.setFieldsValue({ role: 'admin', active: true })
}}>
{t('users.addUser')}
</Button>
</Tooltip>
}
/>
}