Skip to content

ผู้เขียนแก้ได้เฉพาะบทความของตัวเอง ​

สิ่งที่จะได้

บทบาท author ที่เขียนบทความได้แต่แก้ได้เฉพาะของตัวเอง ขณะที่ editor และ admin จัดการได้ทุกบทความ ใช้: บทบาท, การควบคุมสิทธิ์, hooks

1. เพิ่มบทบาท ​

ts
auth: { roles: ['admin', 'editor', 'author'] },

กำหนดบทบาทให้แต่ละคนได้ที่ ตั้งค่า → ผู้ใช้

2. บันทึกว่าใครเขียนบทความ ​

ts
{
  slug: 'posts',
  fields: [
    // …
    {
      name: 'author',
      type: 'relationship',
      to: 'users',
      position: 'sidebar',
      // เฉพาะ editor และ admin ที่เปลี่ยนผู้เขียนได้
      access: { update: ({ user }) => user?.role !== 'author' },
    },
  ],
  hooks: {
    beforeChange: [
      ({ data, operation, user }) =>
        operation === 'create' && user && !data.author ? { ...data, author: user.id } : data,
    ],
  },
}

3. จำกัดสิ่งที่ author แก้ได้ ​

ts
access: {
  read: () => true,
  create: ({ user }) => !!user,
  // ผลลัพธ์แบบ `where` อนุญาตเฉพาะเอกสารที่ตรงเงื่อนไข
  update: ({ user }) =>
    user?.role === 'author' ? { author: { equals: user.id } } : !!user,
  delete: ({ user }) => user?.role === 'admin' || user?.role === 'editor',
},

ในหน้า admin ผู้เขียนเปิดดูได้ทุกบทความแต่บันทึกได้เฉพาะของตัวเอง และจะไม่เห็นปุ่มลบ ถ้าต้องการซ่อนบทความของคนอื่น จากรายการด้วย ให้ read คืน where เดียวกันสำหรับ author ที่ login:

ts
read: ({ user }) =>
  user?.role === 'author'
    ? { author: { equals: user.id } }
    : user
      ? true
      : { status: { equals: 'published' } },

ตรวจสอบ ​

login เป็น author: สร้างบทความ แล้วเปิดบทความของคนอื่น การบันทึกจะได้ 403 Forbidden และหน้า admin จะบอกว่าดูได้อย่างเดียว

เผยแพร่ภายใต้สัญญาอนุญาต MIT