Permissions naming convention
A set of naming conventions for permissions
The components of the permission names should be used in a hierarchical manner, from the most general (module) to the most specific (action). The permission name should contain the following components separated by a dot.
1. Module-Specific Prefix
Convention: Start with a service-specific prefix indicating the Folio module. The
mod-
prefix should be excluded.Example:
finance-storage
infinance-storage.budgets.item.post
Example:
notes
innotes.item.put
2. Resource Identifier
Convention: Follow with a resource identifier, specifying the particular resource is being accessed or modified.
Example:
budgets
infinance-storage.budgets.item.post
.Example:
fiscal-years
infinance-storage.fiscal-years.item.delete
3. Entity Scope
Convention: Indicate the scope of the operation: whether it's for a single entity (
item
) or multiple entities (collection
).Example:
item
infinance-storage.budgets.item.post
signifies an operation on a single budget entity.Example:
collection
infinance-storage.budgets.collection.get
signifies an operation on a collection of budget entities. This is often used for for “get-by-query” or “delete-by-query” operations.
4. Procedural Permissions
Convention: Use a clear and descriptive name for procedural permissions, usually ending with an action verb.
Example:
invoice-transaction-summaries.execute
infinance.invoice-transaction-summaries.execute
Example:
check-out-by-barcode.post
incirculation.check-out-by-barcode.post
5. Action Verb
Convention:
Backend permission action verbs: Use HTTP-like verbs to specify the action. The available action verbs are:
get
for retrievalpost
for creation and executionput
for updatespatch
for partial updatesdelete
for deleteexecute
for execution
Frontend permission action verbs are:
view
for viewing of entitiesedit
for edit of entitiescreate
for creation of entitiesdelete
for deletion of entitiesenabled
- single permission for the module, that marked it “enabled“execute
- for actions' executionsmanage
- any kind of aggregators or whenexecute
sounds weird
Example:
post
infinance-storage.budgets.item.post
indicates a creation operation,create
in "ui-inventory.item.create"
6. Settings Permissions
The settings permissions should not have action verb.
Example:
ui-inventory.settings.call-number-types
7. General Permissions
Convention: For broad or general permissions that encompass multiple actions or resources, use a comprehensive term followed by
all
.Example:
funds.all
infinance.funds.all
indicates a permission that applies to all actions related to funds.
Use of punctuation
As described above, permission names are segmented, with segments delimited by dot/period .
Within each segment, there is sometimes a need for further segmentation. E.g. check-in-by-barcode
or inventory-storage
. These segments are usually delimited by dash/hyphen -
. When translating these permissions to corresponding resource/action, these dashes/hyphens are carried forward. For instance:
Given permission
ui-inventory.call-number-browse.view
you end up with:resource:
UI-Inventory Call-Number-Browse
action:
view
Given permission
orders-storage.po-lines.item.get
you end up with:resource:
Orders-Storage Po-Lines Item
action:
view
As shown in the examples above, when forming the resource name, the hyphens/dashes are carried forward and the dots/periods are replaced by a single space when forming the resource name.
Underscores, while not commonly used in permission names, are technically valid. These, like dot/period are replaced by a single space when forming the resource name. For example:
Given the permission
erm.sts_for_platform_id.collection.get
you end up with:resource:
Erm Sts For Platform Id Collection
action:
view
Current naming conventions violations
The wiki page Permissions violations lists permissions which do not align with the naming conventions described herein. Common convention violations include:
The backend action verb (e.g. execute, post) is omitted: circulation.internal.apply-rules , circulation.override-patron-block, okapi.env.list
The frontend action verb (e.g. edit, execute) is omitted: ui-users.loans.renew, ui-users.loans.renew
The general postfix ui-orders.third-party-services, ui-users.feefineactions, ui-users.accounts
Using non-standard action verbs: user-import.add, ui-users.loans.anonymize, mod-settings.global.read.ui-ldp.admin, ui-inventory.instance.createOrder
Adding additional details after the action verb: ui-bulk-edit.view.base,
Conclusion
These conventions should help in maintaining a structured and clear approach to defining permissions, making it easier for developers and administrators to understand and manage access controls within the Folio.
This set of verbs doesn’t seem to cover so-called “upsert” actions, that is APIs that for the client’s convenience and for performance optimization decides on the fly whether submitted records are updates or creates?
mod-settings, mod-inventory-update and possibly other modules have APIs like that, and the convention would force a choice that cannot accurately reflect the action.
Also, if you have both an update, an insert and an upsert action for a given API, it appears you could end up with permission name collisions, following these conventions in combination with section 3.