Извлеките класс CSS в зависимости от типа пользователя
Можно ли извлечь строку PHP для типа пользователя, если пользователь не является администратором?
Мне нужно различать штатных и нештатных пользователей. Я знаю о $is_admin
, но в этом случае мне понадобится что-то вроде $is_staff
.
Мне это нужно, чтобы я мог применять стили CSS для скрытия/отображения некоторых полей, которые я хочу видеть только для штатных пользователей.
Кто-нибудь знает, есть ли что-нибудь, что могло бы мне помочь?
1 answers
Если $user
- объект пользователя, то $user->roles
- массив, содержащий все роли, которые есть у пользователя. В Drupal нет понятия типа пользователя, и роли пользователей наиболее близки к нему.
Если вы хотите проверить, например, есть ли у пользователя роль "редактор", вы можете использовать код, подобный следующему:
$global $user;
if (in_array(array_values($user->roles), "editor")) {
// The user has the "editor" role.
}
В зависимости от того, чего вы пытаетесь достичь, вам также может быть интересно проверить, есть ли у пользователя определенное разрешение, что обычно делается в Drupal, где вместо проверки роли, назначенной пользователю, проверяется, какое разрешение у пользователя есть (с помощью user_access()).
Что касается скрытия поля формы, это можно сделать, реализовав функцию hook_form_alter() или функцию hook_form_FORM_ID_alter() и изменив свойство "#доступ" поля формы.
Предположим, что "example_form" - это идентификатор формы для формы, которую вы хотите изменить, а "файл" - идентификатор поля формы для изменения, тогда вы можете использовать код, аналогичный следующему ("mymodule" - это имя модуля; измените его, чтобы оно соответствовало имени модуля, содержащего крючок):
function mymodule_form_example_form_alter(&$form, &$form_state) {
$form['file']['#access'] = user_access('administer file');
}
"Администрирование файла" - это разрешение, которое должно быть у пользователя. В качестве альтернативы, если вы хотите только проверить, имеет ли пользователь роль "редактор", вы можете использовать код, подобный следующему:
function mymodule_form_example_form_alter(&$form, &$form_state) {
global $user;
$form['file']['#access'] = in_array(array_values($user->roles), "editor");
}
Глобальная переменная содержит объект пользователя для текущего вошедшего в систему пользователя.