Files
2026-08-31 19:55:41 +02:00

89 lines
1.4 KiB
TypeScript

import { type CollectionConfig, type AccessArgs } from 'payload';
function isSelfOrAdmin({ req }: AccessArgs) {
if (req.user?.role === 'superadmin')
return true;
if (req.user?.role === 'admin')
return {
id: {
equals: req.user?.id
}
};
return false;
}
export const Users: CollectionConfig = {
slug: 'users',
labels: {
singular: 'Benutzer',
plural: 'Benutzer'
},
admin: {
useAsTitle: 'fullName',
group: 'System',
description: 'Benutzer verwalten',
defaultColumns: [ 'id', 'fullName', 'email', 'role' ],
hideAPIURL: true
},
access: {
read: isSelfOrAdmin,
create: ({ req }) => req.user?.role === 'superadmin',
update: isSelfOrAdmin,
delete: ({ req }) => req.user?.role === 'superadmin'
},
auth: true,
fields: [
{
name: 'firstName',
label: 'Vorname',
type: 'text',
required: true
},
{
name: 'lastName',
label: 'Nachname',
type: 'text',
required: true
},
{
name: 'role',
label: 'Rolle',
type: 'select',
required: true,
access: {
update: ({ req }) => req.user?.role === 'superadmin'
},
options: [
{
label: 'Super-Admin (GSH)',
value: 'superadmin'
},
{
label: 'Administrator',
value: 'admin'
}
]
},
{
name: 'fullName',
label: 'Name',
type: 'text',
admin: {
hidden: true,
readOnly: true
},
hooks: {
beforeChange: [
({ data }) => `${data?.firstName} ${data?.lastName}`
]
}
}
]
};