Модуль user предоставляет довольно неудобную функцию, которая проверяет роль пользователя по Role-ID, а не по названию роли.
Код и описание функции (из /modules/user/user.module):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/** * Проверяет есть ли указанная роль у пользователя * @param int $rid - Код роли * * @param object|null $account * (не обязательный) Аккаунт пользователя. По умолчанию - текущий пользователь. * * @return bool * Вернет TRUE если пользователь обладает данной ролью, или FALSE - иначе. */ function user_has_role($rid, $account = NULL) { if (!$account) { $account = $GLOBALS['user']; } return isset($account->roles[$rid]); } |
Проблема в том, что роли пользователей имеют суррогатный числовой ключ, по которому и производится сравнение. Было бы удобнее работать в данном случае с ключом — стоковой константой. Говорят, в 8ке это уже изменили.
Для 7ки можно использовать свой вариант функции (добавьте в ваш модуль или статический класс):
1 2 3 4 5 6 7 8 9 |
function _user_has_role($role_name, $acc = NULL) { if (!$acc) $acc = $GLOBALS['user']; if (is_array($acc->roles) && in_array($role_name, array_values($acc->roles))) { return TRUE; } return FALSE; } |
Эта функция принимает для проверки имя роли.