Извлеките класс CSS в зависимости от типа пользователя


Можно ли извлечь строку PHP для типа пользователя, если пользователь не является администратором?

Мне нужно различать штатных и нештатных пользователей. Я знаю о $is_admin, но в этом случае мне понадобится что-то вроде $is_staff.
Мне это нужно, чтобы я мог применять стили CSS для скрытия/отображения некоторых полей, которые я хочу видеть только для штатных пользователей.

Кто-нибудь знает, есть ли что-нибудь, что могло бы мне помочь?

Author: kiamlaluno, 2011-07-21

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");
}

Глобальная переменная содержит объект пользователя для текущего вошедшего в систему пользователя.

 5
Author: kiamlaluno, 2011-07-21 22:39:26