web / lib/collections/shared-fields
lib/collections/shared-fields
Provides shared, reusable components for defining Payload CMS collections.
This module contains helper functions and constant definitions to promote consistency and reduce boilerplate code across different collection configurations. It includes:
- Access control helpers (e.g.,
isEditorOrAdmin). - Common field definitions (e.g.,
basicMetadataFields,metadataField). - A factory function (
createSlugField) for generating URL-friendly slugs. - A factory function (
createCommonConfig) to apply standard collection-level settings like timestamps, versioning, and drafts.
Interfaces
CommonCollectionOptions
Properties
versions?
optionalversions:boolean
drafts?
optionaldrafts:boolean
maxPerDoc?
optionalmaxPerDoc:number
trash?
optionaltrash:boolean
timestamps?
optionaltimestamps:boolean
Variables
isAdmin
constisAdmin:Access
isEditorOrAdmin
constisEditorOrAdmin:Access
isAuthenticated
constisAuthenticated:Access
setCreatedByHook
constsetCreatedByHook:CollectionBeforeChangeHook
Hook that sets the createdBy field to the current user on document creation. Use in beforeChange hooks for collections with a createdBy relationship field.
basicMetadataFields
constbasicMetadataFields:Field[]
metadataField
constmetadataField:Field
Functions
createOwnershipAccess()
createOwnershipAccess(
_collection,ownerField?):Access
Factory for ownership-based access control. Returns true for editors/admins, or a WHERE clause filtering by ownership field. Uses zero-query approach (WHERE clause) instead of per-document DB lookup.
Parameters
_collection
string
ownerField?
"user" | "createdBy" | "ownedBy"
Returns
Access
createPublicOwnershipAccess()
createPublicOwnershipAccess(
ownerField?):object
Access control bundle for collections with public visibility + ownership.
Provides all five access functions for collections where:
- Documents have an
isPublicfield controlling anonymous visibility - Documents have an owner field (default:
createdBy) for per-user access - Editors/admins have full access
Used by Sites and Views collections to eliminate duplicated access logic.
Parameters
ownerField?
"user" | "createdBy" | "ownedBy"
Returns
object
read
read:
Access
create
create:
Access
update
update:
Access
deleteAccess
deleteAccess:
Access
readVersions
readVersions:
Access
createSlugField()
createSlugField<
T>(collection,sourceField?):Field
Type Parameters
T
T extends "import-files" | "catalogs" | "data-exports" | "datasets" | "dataset-schemas" | "audit-log" | "import-jobs" | "scheduled-imports" | "events" | "users" | "user-usage" | "media" | "location-cache" | "geocoding-providers" | "pages" | "sites" | "themes" | "layout-templates" | "views" | "schema-detectors" | "payload-kv" | "payload-jobs" | "payload-locked-documents" | "payload-preferences" | "payload-migrations"
Parameters
collection
T
sourceField?
string = "name"
Returns
Field
createCreatedByField()
createCreatedByField(
description,options?):Field
Create a createdBy relationship field pointing to users.
Parameters
description
string
options?
required?
boolean
Returns
Field
createIsPublicField()
createIsPublicField(
options?):Field
Create an isPublic checkbox field with optional private visibility notice.
Parameters
options?
defaultValue?
boolean
description?
string
showPrivateNotice?
boolean
Returns
Field
editorOrAdminCondition()
editorOrAdminCondition(
__namedParameters):boolean
Admin condition: only show field to editors and admins.
Parameters
__namedParameters
req?
{ user?: \{ role?: string; } | null; }
req.user?
{ role?: string; } | null
Returns
boolean
createCommonConfig()
createCommonConfig(
options?):object
Parameters
options?
Returns
object
timestamps
timestamps:
boolean
trash
trash:
boolean
versions?
optionalversions:object
versions.maxPerDoc
maxPerDoc:
number
versions.drafts?
optionaldrafts:object
versions.drafts.autosave
autosave:
boolean