summaryrefslogtreecommitdiff
path: root/src/collections/Articles.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/collections/Articles.ts')
-rw-r--r--src/collections/Articles.ts99
1 files changed, 99 insertions, 0 deletions
diff --git a/src/collections/Articles.ts b/src/collections/Articles.ts
new file mode 100644
index 0000000..abe03ee
--- /dev/null
+++ b/src/collections/Articles.ts
@@ -0,0 +1,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",
+ },
+ ],
+ },
+ ],
+};