SecurityPrincipal interface

A JavaScript object implementing the SecurityPrincipal interface represents an entity which is used for authentication. Specifically, SecurityPrincipal objects represent users of the application and groups of users.

Construction

Users and groups are created through the System Management user interface in your web browser, or via a privileged JavaScript API.

SecurityPrincipal objects representing users and groups are looked up using O.user(), O.group() and O.securityPrincipal(), and in request context, by the O.currentUser property.

Service users, created by schema requirements, are looked up with O.serviceUser().

Interface (users and groups)

The following interface is valid for SecurityPrincipal objects representing both users and groups.

property id

ID of this principal.

property name

The name of the principal, suitable for displaying in your user interface.

property email

If the principal represents a user, the email address this user uses to log in.

If the principal represents a group, this property is optional, and is the notification email address for this group.

property ref

If there is an object in the object store which represents this user or group, return a Ref of that store object. Otherwise, return null.

A store object represents the security principal if it has been explicitly set in System Management or programmatically.

property isGroup

true if this SecurityPrincipal represents a group, false if it represents a user.

property isActive

true if this SecurityPrincipal represents an active user or group, false if it has been deleted, blocked or disabled.

property isSuperUser

true if this SecurityPrincipal represents a super-user. These include the built in SYSTEM and SUPPORT users.

property isServiceUser

true if this SecurityPrincipal represents a service user.

property isAnonymous

true if this SecurityPrincipal represents an anonymous user. This includes the built in ANONYMOUS user.

property tags

An Object-like dictionary of short String to String key value pairs. Use for values that you will use in user queries, and the data property for all other information.

Ref objects will be automatically converted to a String, but otherwise, an exception will be raised if a non-String object is assigned to a key.

User tags are indexed, and can be efficiently queried with O.usersByTags().

The tag username is special, and should only be set by plugins which manage user accounts (such as user syncs and data import plugins).

property groupIds

An array of IDs of the groups this principal belongs to.

property directGroupIds

An array of the IDs of the groups this principal directly belongs to.

You probably should use groupIds or isMemberOf() instead of this property, as this array doesn’t include implied memberships (when a group is a member of another group) nor the Everyone group.

It’s only useful for user syncing plugins. Don’t use it for anything else.

property data

The DataStore object for this principal. Plugins can use this to store small amounts of arbitrary data against an principal.

Note there are restrictions and limitations on the data which can be stored. See the DataStore documentation for details. In addition, any keys used must be of the form plugin_name:key, to create a separate namespace for each plugin and avoid conflicts. The inclusion of a : character is enforced.

function isMemberOf(groupId)

Returns true if the principal is a member of the groups specified by groupId. Use schema GROUP constants.

This is useful for implementing authorisation in your plugin. Create user groups, then check for membership of the group to authorise the user.

function allowed(action)

Returns true if the principal is permitted to perform the given action.

action is an Action object, obtained using O.action(), with rules configured by one or more plugins.

Interface (internationalisation)

property localeId

Returns the user’s locale id, for example "en". Note that the user’s session may have a different locale.

function setLocaleId(localeId)

Sets the user’s locale id to the given localeId. This may not have any effect on a logged in session. Use O.setSessionLocaleId() if the current session needs to change the locale to match.

function getTimeZone()

Return the TimeZone for this user or group.

Interface (users)

The following interface is valid for SecurityPrincipal objects representing users.

property nameFirst

First name.

property nameLast

Last name.

property otpIdentifier

One time password token identifier assigned to this user, or null if no token is assigned.

function can(operation, entities)

Returns true if the user is allowed to carry out the operation on the object specified by entities.

Valid values for operation are: "update", "read", "create", "relabel", "delete", and "approve".
Valid values for entities are: A single Ref or a LabelList

For each operation there is also a wrapper function for readability. For example:
can("update", entities) becomes canUpdate(entities)

function canCreateObjectOfType(typeRef)

Returns true if the user has permission to create an object specified by the Ref argument. Use the schema TYPE constants.

If typeRef is null or undefined, then false will be returned.

function createAPIKey(name, path)

Create an API key for this user, with the given name and path. The name is visible in System management to describe this key. Permissible requests are restricted to those with paths starting with path, or exact match if it’s prefixed with =.

Your plugin must have the pUserCreateAPIKey privilege declared in plugin.json.

Interface (groups)

The following interface is valid for SecurityPrincipal objects representing groups.

property code

The API code (as used in schema requirements) of a group, if it has one. If it does not, or this principal represents a user, the property is null.

function loadAllMembers()

Returns an array of SecurityPrincipal objects representing users only. If one of the members of this group is another group, the returned array will contain that group’s users.

function loadAllBlockedMembers();

Like loadAllMembers(), but returns a list of blocked users.