Access Control Lists (ACL)
Omeka S uses an access control list for privilege management.
User Roles
There are six discrete user roles, each in a large part having greater access than the last:
- researcher:
researcher
- author:
author
- reviewer:
reviewer
- editor:
editor
- site administrator:
site_admin
- global administrator:
global_admin
Checking for Permission
There are three ways to run a permission check.
ACL Service
Where the ACL service is available, there are three methods: userIsAllowed()
, isAdmin()
, and isAllowed()
. See Services and Factories for more information.
userIsAllowed($resource, $privilege)
checks whether the current user has access to a resource and privilege.
isAllowed($user, $resource, $privilege)
can be used to check the same access for any user.
isAdminRole($role)
checks whether a user role is among the ones with admin privileges (i.e., site_admin
or global_admin
).
// Get the ACL service:
$acl = $this->getServiceLocator()->get('Omeka\Acl');
if ($acl->userIsAllowed($resource, $privilege)) {
// current user is allowed
}
if ($acl->isAllowed($user, $resource, $privilege)) {
// passed user is allowed
}
$role = $user->getRole();
if ($acl->isAdminRole($role) {
// allow admin access
}
From within a Resource Representation
When you have a resource representation, use userIsAllowed()
to check for privileges on it.
// Get a resource representation via the API manager:
$api = $this->getServiceLocator()->get('Omeka\ApiManager');
$item = $api->read('items', 1)->getContent();
if ($item->userIsAllowed($privilege)) {
// current user is allowed
}
From within a View or Controller
From within a view or a controller, the userIsAllowed()
helper is available:
// In a view script:
if ($this->userIsAllowed($resource, $privilege)) {
// current user is allowed
}