generated from autonomic-cooperative/astro-payload-template
Add author collection
This commit is contained in:
parent
9629c93ceb
commit
ff564a62ec
13
payload/src/access/isUser.ts
Normal file
13
payload/src/access/isUser.ts
Normal file
@ -0,0 +1,13 @@
|
||||
import { Access, FieldAccess } from "payload/types";
|
||||
import { User } from "../payload-types";
|
||||
|
||||
export const isUser: Access<any, User> = ({ req: { user } }) => {
|
||||
// Return true or false based on if the user has an ssg or admin role
|
||||
return Boolean(user?.roles?.some(role => ['user', 'editor', 'admin'].includes(role)));
|
||||
|
||||
}
|
||||
|
||||
export const isUserFieldLevel: FieldAccess<{ id: string }, unknown, User> = ({ req: { user } }) => {
|
||||
// Return true or false based on if the user has an ssg or admin role
|
||||
return Boolean(user?.roles?.some(role => ['user', 'editor', 'admin'].includes(role)));
|
||||
}
|
44
payload/src/collections/Authors.ts
Normal file
44
payload/src/collections/Authors.ts
Normal file
@ -0,0 +1,44 @@
|
||||
import { CollectionConfig } from "payload/types";
|
||||
import { isAdmin } from "@/access/isAdmin";
|
||||
import { isEditor } from "@/access/isEditor";
|
||||
import { isSSG } from "@/access/isSSG";
|
||||
import { isUser } from "@/access/isUser";
|
||||
import { isEditorOrSelf } from "@/access/isEditorOrSelf";
|
||||
|
||||
const Authors: CollectionConfig = {
|
||||
slug: "authors",
|
||||
admin: {
|
||||
defaultColumns: ["avatar","name"],
|
||||
useAsTitle: "name",
|
||||
},
|
||||
access: {
|
||||
//TODO: Author can CRUD own post
|
||||
create: isUser,
|
||||
read: () => true,
|
||||
update: isEditor,
|
||||
delete: isEditor,
|
||||
},
|
||||
fields: [
|
||||
{
|
||||
name: "name",
|
||||
type: "text",
|
||||
required: true
|
||||
},
|
||||
{
|
||||
name: "avatar",
|
||||
type: "upload",
|
||||
relationTo: "media",
|
||||
required: false,
|
||||
},
|
||||
{
|
||||
name: "user",
|
||||
type: "relationship",
|
||||
relationTo: "users",
|
||||
admin: {
|
||||
description: 'The selected user will be able to edit this author'
|
||||
},
|
||||
}
|
||||
],
|
||||
};
|
||||
|
||||
export default Authors;
|
@ -2,6 +2,7 @@ import { CollectionConfig } from "payload/types";
|
||||
import { isAdmin } from "@/access/isAdmin";
|
||||
import { isEditor } from "@/access/isEditor";
|
||||
import { isSSG } from "@/access/isSSG";
|
||||
import { isUser } from "@/access/isUser";
|
||||
|
||||
const Posts: CollectionConfig = {
|
||||
slug: "posts",
|
||||
@ -12,7 +13,7 @@ const Posts: CollectionConfig = {
|
||||
},
|
||||
access: {
|
||||
//TODO: Author can CRUD own post
|
||||
create: isEditor,
|
||||
create: isUser,
|
||||
read: () => true,
|
||||
update: isEditor,
|
||||
delete: isEditor,
|
||||
@ -89,12 +90,11 @@ const Posts: CollectionConfig = {
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "author",
|
||||
name: "authors",
|
||||
//TODO: Add active user as default
|
||||
type: 'relationship',
|
||||
relationTo: 'users',
|
||||
hasMany: false,
|
||||
required: false,
|
||||
relationTo: 'authors',
|
||||
hasMany: true,
|
||||
admin: {
|
||||
position: "sidebar",
|
||||
},
|
||||
|
@ -35,10 +35,6 @@ const Users: CollectionConfig = {
|
||||
update: isAdminFieldLevel,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'name',
|
||||
type: 'text',
|
||||
}
|
||||
],
|
||||
};
|
||||
|
||||
|
@ -2,6 +2,7 @@ import { buildConfig } from "payload/config";
|
||||
import path from "path";
|
||||
import Posts from "@/collections/Posts";
|
||||
import Users from "@/collections/Users";
|
||||
import Authors from "./collections/Authors";
|
||||
import Media from "@/collections/Media";
|
||||
|
||||
export default buildConfig({
|
||||
@ -19,7 +20,7 @@ export default buildConfig({
|
||||
},
|
||||
}),
|
||||
},
|
||||
collections: [Posts, Users, Media],
|
||||
collections: [Posts, Users, Authors, Media],
|
||||
typescript: {
|
||||
outputFile: path.resolve("/", "types.ts"),
|
||||
},
|
||||
|
Loading…
Reference in New Issue
Block a user