Skip to main content

Reference Capability Registry

Part: Appendices
Chapter: 88

Capabilities are the stable permission contracts consumed by core services, official modules, customer apps, and WASM extensions. They are not the same thing as tuple storage, relation names, or role labels. The auth model determines how a capability is satisfied for a subject and resource. Modules only depend on the capability itself.

Naming Rules​

Capabilities use the form domain.resource.action.

  • domain identifies the owning module family or cross-cutting concern
  • resource is singular and stable across modules
  • action is a verb or verb phrase with narrow meaning

Examples:

  • cms.page.read
  • cms.page.publish
  • catalog.product.edit
  • events.booking.check_in
  • asset.manage_storage

Names should be explicit rather than convenient. admin.manage is too vague. admin.user.manage or admin.audit.read is better. Capabilities should also describe intent rather than transport. Use order.refund.issue, not order.refund.post.

Versioning Rules​

The registry is versioned because official modules depend on it.

  • New capabilities may be added in a backward-compatible release.
  • Removing or renaming a capability requires a major-version change.
  • The meaning of an existing capability must not drift silently.
  • Capability aliases may exist during a deprecation window, but the registry must identify the canonical name.

Customer apps and extensions should declare the minimum registry version they need. Official modules should publish the registry version ranges they support.

Reference Domains​

The following capabilities are part of the baseline platform vocabulary.

CapabilityMeaningTypical owner
system.module.manageInstall, enable, or disable official modules for a customer appcore/admin
system.config.readView effective runtime configurationcore/admin
system.config.writeChange runtime configuration through approved admin toolingcore/admin
admin.shell.accessAccess the shared back-office shelladmin
admin.audit.readView audit and operational logs exposed in adminadmin
cms.page.readView a managed page resource in non-public contextsCMS
cms.page.publishTransition a page into a public stateCMS
cms.page.editChange content or metadata for a pageCMS
cms.navigation.editChange menus and navigation structuresCMS
catalog.product.readView non-public product statecommerce
catalog.product.editEdit product content, inventory-facing fields, or merchandising datacommerce
catalog.collection.editManage categories or collectionscommerce
checkout.session.createStart a checkout flowcommerce
order.readView order detail in admin or customer support contextscommerce
order.refund.issueIssue a refund or reversalcommerce
membership.subscription.manageCreate, modify, pause, or cancel subscriptionsmemberships
membership.tier.editChange membership tier definitionsmemberships
events.event.publishPublish or unpublish an eventevents
events.slot.manageManage time slots, capacity, or schedule stateevents
events.booking.createCreate a booking or reservationevents
events.booking.check_inCheck a booking in at the event boundaryevents
asset.readRead managed assets through non-public channelsmedia/core
asset.read_publicAllow public delivery of a managed assetmedia/core
asset.publishPublish a managed asset into a public statemedia/core
asset.replaceReplace or update an existing managed assetmedia/core
asset.manage_storageChange storage-class or delivery-policy metadatamedia/core
seo.metadata.editEdit canonical, robots, or structured-metadata inputscore/CMS
i18n.translation.editEdit platform or app translations through approved toolingcore/admin

This list is intentionally compact. Customer apps may define additional domains, but they should avoid colliding with first-party namespaces.

Binding Rule​

Capability bindings connect capability names to authorization-model checks. The registry does not prescribe relation names. For example, a default auth package might bind cms.page.publish to the publish permission on page, while a customer-specific replacement package may derive the same capability from a completely different relation graph. Official modules must work with either.

Extension Guidance​

WASM extensions should request capabilities by canonical name and fail clearly if the hosting app does not provide the required binding. Extensions should not assume that an admin user, a site owner, or a group member has any specific relation name in the underlying auth model. The registry is the only supported contract at that level.