acl

The m_acl model gives access the id of the currently logged in user, and provides a mechanism to do basic access control checks.

The following m_acl model properties are available in templates:

PropertyDescription
userReturns the current user id. If not logged in, this returns undefined.
is_adminCheck if the current user is alllowed to access the admin. Internally, this checks the use, mod_admin_config ACL.
use, admin, view, delete, update, insert, linkThese properties are shortcuts to check if the current user is allowed to do some action.
is_allowedPerform custom ACL checks which are different from the ones mentioned.
authenticatedUsed before the other ACL checks to check if a typical user is allowed to perform some actions. Example: m.acl.authenticated.insert.article If a user is logged on the that user's permissions are used.

This example prints a greeting to the currently logged in user, if logged in:

{% if m.acl.user %}
    Hello, {{ m.rsc[m.acl.user].title }}!
{% else %}
    Not logged in yet
{% endif %}

This example checks if the user can access the admin pages:

{% if m.acl.is_admin %} You are an admin {% endif %}

This example performs a custom check:

{% if m.acl.is_allowed.use.mod_admin_config %}
    User has rights to edit the admin config
{% endif %}

And to check if a resource is editable:

{% if m.acl.is_allowed.update[id] %}
   User can edit the resource with id {{ id }}
{% endif %}

A short hand for the above is (assuming id is an integer):

{% if id.is_editable %}
   User can edit the resource with id {{ id }}
{% endif %}

Available Model API Paths

MethodPath patternDescription
get/user/...Return the current ACL user id from the request context.
get/sudo_user/...Return the current sudo user id from the request context.
get/is_admin/...Return whether the current user has admin rights.
get/is_admin_editable/...Return whether admin users are editable in the current ACL setup.
get/is_read_only/...Return whether the current ACL mode is read-only.
get/is_allowed/link/+subject/+predicate/+object/...Check ACL permission for creating/using a link triple (+subject, +predicate, +object).
get/is_allowed/+action/+object/...Check ACL permission for action +action on object +object.
get/authenticated/+action/+object/...Check permission as an authenticated user under default ACL assumptions.
get/authenticated/is_allowed/+action/+object/...Alias of the authenticated permission check for action +action on +object.
get/anonymous/+action/+object/...Check permission as an anonymous user under default ACL assumptions.
get/anonymous/is_allowed/+action/+object/...Alias of the anonymous permission check for action +action on +object.
get/link/+subject/+predicate/+object/...Legacy shortcut for link permission check (same as /is_allowed/link/...).
get/+action/+object/...Shorthand permission check for action +action on +object (same logic as /is_allowed/...).

/+name marks a variable path segment. A trailing /... means extra path segments are accepted for further lookups.

Edit on GitHub

acl_user_group Models admin_status

Referred by

include

See also

Access control

Access control is about defining who is allowed to access certain resources. It takes two steps: