Skip to main content
Version: 0.16

Permissions

Permissions in Stalwart determine which actions and resources a principal is allowed to access. They can be assigned directly to individuals or groups, through roles, or on a tenant as a whole.

To simplify management, multiple permissions can be grouped into a Role object (found in the WebUI under Management › Directory › Roles) and assigned through a single reference on the principal.

Effective Permissions

Each principal carries two permission-related fields: enabledPermissions and disabledPermissions. On Account and Group objects these are wrapped by a Permissions mode that can be Inherit, Merge, or Replace, selecting how the listed permissions combine with those inherited from roles and the containing tenant. The effective permissions of a principal are computed as follows:

  • Start from the enabled permissions of any assigned roles.
  • Apply the principal's own enabledPermissions according to the configured mode (inherit, merge with, or replace the role-derived set).
  • Intersect with the tenant's enabled permissions, in multi-tenant deployments.
  • Subtract every permission listed in disabledPermissions at any level. Disabled permissions always take precedence.

The result is a layered model in which permissions can be added or removed at the role, principal, or tenant level.

Permissions vs. ACLs

Permissions in Stalwart are distinct from Access Control Lists (ACLs).

  • Permissions are defined by administrators and control which server-wide actions a principal may perform, such as managing settings, viewing logs, or sending email.
  • Access Control Lists are managed by users and grant other principals access to specific mailboxes, folders, or other per-resource data. ACLs are controlled through the IMAP ACL extension or JMAP and apply per resource.

Permissions are an administrative policy; ACLs are a user-level sharing mechanism.

Available Permissions

The following table lists the permissions recognised by the server and the built-in roles that include them:

PermissionDescriptionAdmin roleTenant admin roleUser role
ai-model-interactInteract with AI models
api-key-createCreate new API keys
api-key-deleteRemove API keys
api-key-getRetrieve specific API keys
api-key-listView API keys
api-key-updateModify API keys
authenticateAuthenticate
authenticate-oauthAuthenticate via OAuth
blob-fetchRetrieve arbitrary blobs
calendar-alarmsReceive calendar alarms via e-mail
calendar-scheduling-receiveReceive calendar scheduling requests via e-mail
calendar-scheduling-sendSend calendar scheduling requests via e-mail
dav-cal-aclManage access control lists for calendar entries
dav-cal-copyCopy calendar entries to new locations
dav-cal-deleteRemove calendar entries or collections
dav-cal-free-busy-queryQuery free/busy time information for scheduling
dav-cal-getDownload calendar entries
dav-cal-lockLock calendar entries to prevent concurrent modifications
dav-cal-mk-colCreate new calendar collections
dav-cal-moveMove calendar entries to new locations
dav-cal-multi-getRetrieve multiple calendar entries in a single request
dav-cal-prop-findRetrieve properties of calendar entries
dav-cal-prop-patchModify properties of calendar entries
dav-cal-putUpload or modify calendar entries
dav-cal-querySearch for calendar entries matching criteria
dav-card-aclManage access control lists for address book entries
dav-card-copyCopy address book entries to new locations
dav-card-deleteRemove address book entries or collections
dav-card-getDownload address book entries
dav-card-lockLock address book entries to prevent concurrent modifications
dav-card-mk-colCreate new address book collections
dav-card-moveMove address book entries to new locations
dav-card-multi-getRetrieve multiple address book entries in a single request
dav-card-prop-findRetrieve properties of address book entries
dav-card-prop-patchModify properties of address book entries
dav-card-putUpload or modify address book entries
dav-card-querySearch for address book entries matching criteria
dav-expand-propertyExpand properties that reference other resources
dav-file-aclManage access control lists for file resources
dav-file-copyCopy file resources to new locations
dav-file-deleteRemove file resources
dav-file-getDownload file resources
dav-file-lockLock file resources to prevent concurrent modifications
dav-file-mk-colCreate new file collections or directories
dav-file-moveMove file resources to new locations
dav-file-prop-findRetrieve properties of file resources
dav-file-prop-patchModify properties of file resources
dav-file-putUpload or modify file resources
dav-principal-aclSet principal properties for access control
dav-principal-listList available principals in the system
dav-principal-matchMatch principals based on specified criteria
dav-principal-searchSearch for principals by property values
dav-principal-search-prop-setDefine property sets for principal searches
dav-sync-collectionSynchronize collection changes with client
dkim-signature-createCreate DKIM signatures for email authentication
dkim-signature-getRetrieve DKIM signature information
domain-createAdd new email domains
domain-deleteRemove email domains
domain-getRetrieve specific domain information
domain-listView list of email domains
domain-updateModify domain information
email-receiveReceive emails
email-sendSend emails
fts-reindexRebuild the full-text search index
group-createAdd new user groups
group-deleteRemove user groups
group-getRetrieve specific group information
group-listView list of user groups
group-updateModify group information
imap-acl-getRetrieve ACLs via IMAP
imap-acl-setSet ACLs via IMAP
imap-appendAppend messages via IMAP
imap-authenticateAuthenticate via IMAP
imap-capabilityRetrieve server capabilities via IMAP
imap-copyCopy messages via IMAP
imap-createCreate mailboxes via IMAP
imap-deleteDelete mailboxes or messages via IMAP
imap-enableEnable IMAP extensions
imap-examineExamine mailboxes via IMAP
imap-expungeExpunge deleted messages via IMAP
imap-fetchFetch messages or metadata via IMAP
imap-idRetrieve server ID via IMAP
imap-idleUse IMAP IDLE command
imap-listList mailboxes via IMAP
imap-list-rightsList rights via IMAP
imap-lsubList subscribed mailboxes via IMAP
imap-moveMove messages via IMAP
imap-my-rightsRetrieve own rights via IMAP
imap-namespaceRetrieve namespaces via IMAP
imap-renameRename mailboxes via IMAP
imap-searchSearch messages via IMAP
imap-selectSelect mailboxes via IMAP
imap-sortSort messages via IMAP
imap-statusRetrieve mailbox status via IMAP
imap-storeModify message flags via IMAP
imap-subscribeSubscribe to mailboxes via IMAP
imap-threadThread messages via IMAP
impersonateAct on behalf of another user
incoming-report-deleteRemove incoming DMARC, TLS and ARF reports
incoming-report-getRetrieve specific incoming DMARC, TLS and ARF reports
incoming-report-listView incoming DMARC, TLS and ARF reports
individual-createAdd new user accounts
individual-deleteRemove user accounts
individual-getRetrieve specific account information
individual-listView list of user accounts
individual-updateModify user account information
jmap-address-book-changesTrack address book changes via JMAP
jmap-address-book-getRetrieve address books via JMAP
jmap-address-book-setCreate or update address books via JMAP
jmap-blob-copyCopy blobs via JMAP
jmap-blob-getRetrieve blobs via JMAP
jmap-blob-lookupLook up blobs via JMAP
jmap-blob-uploadUpload blobs via JMAP
jmap-calendar-changesTrack calendar changes via JMAP
jmap-calendar-event-changesTrack calendar event changes via JMAP
jmap-calendar-event-copyCopy calendar events to new locations via JMAP
jmap-calendar-event-getRetrieve calendar events via JMAP
jmap-calendar-event-notification-changesTrack calendar event notification changes via JMAP
jmap-calendar-event-notification-getRetrieve calendar event notifications via JMAP
jmap-calendar-event-notification-querySearch for calendar event notifications matching criteria via JMAP
jmap-calendar-event-notification-query-changesTrack calendar event notification query changes via JMAP
jmap-calendar-event-notification-setCreate or update calendar event notifications via JMAP
jmap-calendar-event-parseParse calendar events via JMAP
jmap-calendar-event-querySearch for calendar events matching criteria via JMAP
jmap-calendar-event-query-changesTrack calendar event query changes via JMAP
jmap-calendar-event-setCreate or update calendar events via JMAP
jmap-calendar-getRetrieve calendars via JMAP
jmap-calendar-setCreate or update calendars via JMAP
jmap-contact-card-changesTrack contact card changes via JMAP
jmap-contact-card-copyCopy contact cards to new locations via JMAP
jmap-contact-card-getRetrieve contact cards via JMAP
jmap-contact-card-parseParse contact cards via JMAP
jmap-contact-card-querySearch for contact cards matching criteria via JMAP
jmap-contact-card-query-changesTrack contact card query changes via JMAP
jmap-contact-card-setCreate or update contact cards via JMAP
jmap-echoPerform JMAP echo requests
jmap-email-changesTrack email changes via JMAP
jmap-email-copyCopy emails via JMAP
jmap-email-getRetrieve emails via JMAP
jmap-email-importImport emails via JMAP
jmap-email-parseParse emails via JMAP
jmap-email-queryPerform email queries via JMAP
jmap-email-query-changesTrack email query changes via JMAP
jmap-email-setModify emails via JMAP
jmap-email-submission-changesTrack email submission changes via JMAP
jmap-email-submission-getRetrieve email submission info via JMAP
jmap-email-submission-queryPerform email submission queries via JMAP
jmap-email-submission-query-changesTrack email submission query changes via JMAP
jmap-email-submission-setModify email submission settings via JMAP
jmap-file-node-changesTrack file node changes via JMAP
jmap-file-node-getRetrieve file nodes via JMAP
jmap-file-node-querySearch for file nodes matching criteria via JMAP
jmap-file-node-query-changesTrack file node query changes via JMAP
jmap-file-node-setCreate or update file nodes via JMAP
jmap-identity-changesTrack identity changes via JMAP
jmap-identity-getRetrieve user identities via JMAP
jmap-identity-setModify user identities via JMAP
jmap-mailbox-changesTrack mailbox changes via JMAP
jmap-mailbox-getRetrieve mailboxes via JMAP
jmap-mailbox-queryPerform mailbox queries via JMAP
jmap-mailbox-query-changesTrack mailbox query changes via JMAP
jmap-mailbox-setModify mailboxes via JMAP
jmap-participant-identity-changesTrack participant identity changes via JMAP
jmap-participant-identity-getRetrieve participant identity information via JMAP
jmap-participant-identity-setCreate or update participant identities via JMAP
jmap-principal-changesTrack principal changes via JMAP
jmap-principal-getRetrieve principal information via JMAP
jmap-principal-get-availabilityRetrieve availability information via JMAP
jmap-principal-queryPerform principal queries via JMAP
jmap-principal-query-changesTrack principal query changes via JMAP
jmap-push-subscription-getRetrieve push subscriptions via JMAP
jmap-push-subscription-setModify push subscriptions via JMAP
jmap-quota-changesTrack quota changes via JMAP
jmap-quota-getRetrieve quota information via JMAP
jmap-quota-queryPerform quota queries via JMAP
jmap-quota-query-changesTrack quota query changes via JMAP
jmap-search-snippetRetrieve search snippets via JMAP
jmap-share-notification-changesTrack share notification changes via JMAP
jmap-share-notification-getRetrieve share notifications via JMAP
jmap-share-notification-querySearch for share notifications matching criteria via JMAP
jmap-share-notification-query-changesTrack share notification query changes via JMAP
jmap-share-notification-setCreate or update share notifications via JMAP
jmap-sieve-script-getRetrieve Sieve scripts via JMAP
jmap-sieve-script-queryPerform Sieve script queries via JMAP
jmap-sieve-script-query-changesTrack Sieve script query changes via JMAP
jmap-sieve-script-setModify Sieve scripts via JMAP
jmap-sieve-script-validateValidate Sieve scripts via JMAP
jmap-thread-changesTrack thread changes via JMAP
jmap-thread-getRetrieve email threads via JMAP
jmap-vacation-response-getRetrieve vacation responses via JMAP
jmap-vacation-response-setModify vacation responses via JMAP
logs-viewAccess system logs
mailing-list-createCreate new mailing lists
mailing-list-deleteRemove mailing lists
mailing-list-getRetrieve specific mailing list information
mailing-list-listView list of mailing lists
mailing-list-updateModify mailing list information
manage-encryptionManage encryption-at-rest settings
manage-passwordsManage account passwords
message-queue-deleteRemove messages from the queue
message-queue-getRetrieve specific messages from the queue
message-queue-listView message queue
message-queue-updateModify queued messages
metrics-listView stored metrics
metrics-liveView real-time metrics
oauth-client-createCreate new OAuth clients
oauth-client-deleteRemove OAuth clients
oauth-client-getRetrieve specific OAuth clients
oauth-client-listView OAuth clients
oauth-client-overrideOverride OAuth client settings
oauth-client-registrationRegister OAuth clients
oauth-client-updateModify OAuth clients
outgoing-report-deleteRemove outgoing DMARC and TLS reports
outgoing-report-getRetrieve specific outgoing DMARC and TLS reports
outgoing-report-listView outgoing DMARC and TLS reports
pop3-authenticateAuthenticate via POP3
pop3-deleMark messages for deletion via POP3
pop3-listList messages via POP3
pop3-retrRetrieve messages via POP3
pop3-statRetrieve mailbox statistics via POP3
pop3-uidlRetrieve unique IDs via POP3
principal-createCreate new principals
principal-deleteRemove principals
principal-getRetrieve specific principal information
principal-listView list of principals
principal-updateModify principal information
purge-accountPurge user accounts
purge-blob-storePurge the blob storage
purge-data-storePurge the data storage
purge-in-memory-storePurge the in-memory storage
restartRestart the email server
role-createCreate new roles
role-deleteRemove roles
role-getRetrieve specific role information
role-listView list of roles
role-updateModify role information
settings-deleteRemove system settings
settings-listView system settings
settings-reloadRefresh system settings
settings-updateModify system settings
sieve-authenticateAuthenticate for Sieve script management
sieve-check-scriptValidate Sieve scripts
sieve-delete-scriptDelete Sieve scripts
sieve-get-scriptRetrieve Sieve scripts
sieve-have-spaceCheck available space for Sieve scripts
sieve-list-scriptsList Sieve scripts
sieve-put-scriptUpload Sieve scripts
sieve-rename-scriptRename Sieve scripts
sieve-set-activeSet active Sieve script
spam-filter-testTest the spam filter
spam-filter-trainTrain the spam filter
spam-filter-updateModify spam filter settings
tenant-createAdd new tenants
tenant-deleteRemove tenants
tenant-getRetrieve specific tenant information
tenant-listView list of tenants
tenant-updateModify tenant information
tracing-getRetrieve specific trace information
tracing-listView stored traces
tracing-livePerform real-time tracing
troubleshootPerform troubleshooting
undeleteRestore deleted items
unlimited-requestsPerform unlimited requests
unlimited-uploadsUpload unlimited data
webadmin-updateModify web admin interface settings