Files
Moniki_uslugi/apps/cms/src/collections/Users.ts
T

92 lines
2.4 KiB
TypeScript

import type { CollectionConfig } from 'payload'
import { ADMIN_GROUP } from '../admin/groups'
export const Users: CollectionConfig = {
slug: 'users',
labels: { singular: 'Пользователь', plural: 'Пользователи' },
auth: {
tokenExpiration: 60 * 60 * 24 * 7,
cookies: {
sameSite: 'Lax',
secure: process.env.NODE_ENV === 'production',
},
},
admin: {
group: ADMIN_GROUP.cabinet,
useAsTitle: 'email',
defaultColumns: ['email', 'fullName', 'role'],
},
fields: [
{
name: 'fullName',
type: 'text',
required: true,
label: 'ФИО',
},
{
name: 'phone',
type: 'text',
label: 'Телефон',
},
{
name: 'role',
type: 'select',
required: true,
defaultValue: 'patient',
options: [
{ label: 'Пациент', value: 'patient' },
{ label: 'Врач', value: 'doctor' },
{ label: 'Администратор', value: 'admin' },
],
},
{
name: 'birthDate',
type: 'date',
label: 'Дата рождения',
},
{
name: 'locale',
type: 'select',
defaultValue: 'ru',
options: [
{ label: 'Русский', value: 'ru' },
{ label: 'English', value: 'en' },
{ label: 'Беларуская', value: 'be' },
{ label: 'Тоҷикӣ', value: 'tg' },
{ label: 'Кыргызча', value: 'ky' },
{ label: '中文', value: 'zh' },
],
},
{
name: 'smsOptIn',
type: 'checkbox',
defaultValue: true,
label: 'SMS-уведомления (напоминания и переносы)',
admin: {
description: 'Канал для будущей SMS-рассылки',
},
},
{
name: 'emailOptIn',
type: 'checkbox',
defaultValue: true,
label: 'Email-уведомления',
},
],
access: {
create: () => true,
read: ({ req: { user } }) => {
if (!user) return false
if (user.role === 'admin') return true
return { id: { equals: user.id } }
},
update: ({ req: { user } }) => {
if (!user) return false
if (user.role === 'admin') return true
return { id: { equals: user.id } }
},
delete: ({ req: { user } }) => user?.role === 'admin',
admin: ({ req: { user } }) => user?.role === 'admin',
},
}