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:
@@ -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>
|
||||
}
|
||||
/>
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user