1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
import type { CollectionConfig } from "payload";
export const Articles: CollectionConfig = {
slug: "articles",
admin: {
useAsTitle: "title",
defaultColumns: ["title", "category", "status", "publishedAt"],
},
access: {
read: ({ req: { user } }) => {
if (user) return true;
return { status: { equals: "published" } };
},
create: ({ req: { user } }) =>
user?.role === "admin" || user?.role === "editor",
update: ({ req: { user } }) =>
user?.role === "admin" || user?.role === "editor",
delete: ({ req: { user } }) => user?.role === "admin",
},
fields: [
{
name: "title",
type: "text",
required: true,
},
{
name: "slug",
type: "text",
required: true,
unique: true,
admin: {
position: "sidebar",
},
},
{
name: "excerpt",
type: "textarea",
required: true,
maxLength: 300,
},
{
name: "category",
type: "select",
required: true,
options: [
{ label: "OIDC / OAuth", value: "oidc-oauth" },
{ label: "Zero Trust", value: "zero-trust" },
{ label: "Active Directory", value: "active-directory" },
{ label: "Entra ID", value: "entra-id" },
{ label: "Keycloak", value: "keycloak" },
{ label: "Sécurité Générale", value: "security-general" },
{ label: "DevSecOps", value: "devsecops" },
],
},
{
name: "content",
type: "richText",
required: true,
},
{
name: "coverImage",
type: "upload",
relationTo: "media",
},
{
name: "status",
type: "select",
required: true,
defaultValue: "draft",
options: [
{ label: "Brouillon", value: "draft" },
{ label: "Publié", value: "published" },
],
admin: {
position: "sidebar",
},
},
{
name: "publishedAt",
type: "date",
admin: {
position: "sidebar",
date: {
pickerAppearance: "dayAndTime",
},
},
},
{
name: "tags",
type: "array",
fields: [
{
name: "tag",
type: "text",
},
],
},
],
};
|