Payload Adsign Plugin

Access Control Setup

Type-safe role-based access control

Setup

  1. Add roles field to Users:
collections/Users/index.ts
import { rolesField } from '@adsign/payload-adsign-plugin';

export const Users: CollectionConfig = {
  fields: [
    rolesField({
      name: 'roles',
      roles: [
        {
          label: 'Admin',
          name: 'admin',
        },
        {
          label: 'Editor',
          name: 'editor',
        },
      ],
    }),
  ],
};
  1. Create access control helper:
access.ts
import { createAccessControl } from '@adsign/payload-adsign-plugin';

export const { role } = createAccessControl({
  collection: 'users',
  rolesField: 'roles',
});
  1. Use in collections:
collections/Articles/index.ts
import { role } from './access';

export const Articles: CollectionConfig = {
  access: {
    read: role(['admin', 'editor', 'public']),
    create: role(['admin', 'editor']),
    update: role(['admin', 'editor']),
    delete: role(['admin']),
  },
};

Special Roles

  • 'public' - Access for everyone (including unauthenticated)
  • 'none' - No access for anyone

Field-Level Access

collections/Articles/index.ts
export const Articles: CollectionConfig = {
  fields: [
    {
      name: 'title',
      type: 'text',
    },
    {
      name: 'internalNotes',
      type: 'textarea',
      access: {
        read: role(['admin']),
        update: role(['admin']),
      },
    },
  ],
};

On this page