Retrieve an array of roles matching specified conditions.
$membersonly: Set this to TRUE to exclude the 'anonymous' role.
$permission: A string containing a permission. If set, only roles containing that permission are returned.
An associative array with the role id as the key and the role object as value.
function user_roles($membersonly = FALSE, $permission = NULL) {
$user_roles =& drupal_static(__FUNCTION__);
// Do not cache roles for specific permissions. This data is not requested
// frequently enough to justify the additional memory use.
if (empty($permission)) {
$cid = $membersonly ? DRUPAL_AUTHENTICATED_RID : DRUPAL_ANONYMOUS_RID;
if (isset($user_roles[$cid])) {
return $user_roles[$cid];
}
}
$roles = entity_load_multiple('user_role');
if ($membersonly) {
unset($roles[DRUPAL_ANONYMOUS_RID]);
}
if (!empty($permission)) {
$result = db_select('role_permission', 'p')
->fields('p', array(
'rid',
))
->condition('p.rid', array_keys($roles))
->condition('p.permission', $permission)
->execute()
->fetchCol();
$roles = array_intersect_key($roles, array_flip($result));
}
if (empty($permission)) {
$user_roles[$cid] = $roles;
}
return $roles;
}