Drupal - видимость объектов Node-формы по ролям - PullRequest
0 голосов
/ 04 июля 2010

Я нахожусь в процессе создания бланка узла.Я хочу, чтобы у прошедших проверку пользователей было как можно меньше полей, а я как администратор хочу видеть все поля.Как написать оператор php if, который проверяет, является ли текущий вошедший в систему пользователь администратором?

Ответы [ 4 ]

0 голосов
/ 06 июля 2010

Нестандартная практика - контролировать, какие поля пользователь видит через слой тем.Лучше использовать систему контроля доступа должным образом, чтобы другие разработчики знали, как снова настроить вещи для своих собственных изменений.

Я бы создал модуль со следующим кодом:

<?php
/**
 * Implementation of hook_form_alter().
 */
function custommodule_form_alter(&$form, &$form_state, $form_id) {
  global $user;

  // All node forms are built with the form_id "<machine_name>_node_form"
  if (substr($form_id, -10) != '_node_form') {
    // Only making changes on the node forms.
    return;
  }

  // Make the menu field invisible to those without the administrator role.
  // This will hide the menu field from users with the user permissions to make changes.
  // Remember 'administrator' is not a default role in Drupal. It's one you create yourself or install a module (like Admin Role*)
  $form['menu']['#access'] = in_array('administrator', array_values($user->roles));

  // This approach allows me to tie access to any permission I care to name.
  // This specifically limits the menu field to menu administrators.
  $form['menu']['#access'] = user_access('administer menu');
}
?>

Используя этот подход, форма просто не будет строить те элементы, к которым текущий пользователь не может получить доступ.

Если вы хотите узнать об элементах формы на странице формы вашего узла, вы можете найти руководство через Google.Если вы хотите пробежаться по полной распечатке из структуры Form, вставьте drupal_set_message(print_r($form, TRUE)); в вашу реализацию hook_form_alter (), чтобы увидеть, что там.Более того, установите Devel , и тогда вы можете получить более приятный тематический вывод, вставив dpm($form);.

0 голосов
/ 05 июля 2010

Кажется, здесь есть некоторая неопределенность.Вы можете управлять отображением полей для конечных пользователей, используя приведенный выше код в шаблоне темы.Это не повлияет на отображение полей при редактировании контента или создании форм.Для этого вы, вероятно, захотите использовать field_permissions (часть cck), которая ограничивает доступ к полям в зависимости от роли.

0 голосов
/ 05 июля 2010

CCK Разрешения на содержание.

0 голосов
/ 04 июля 2010
global $user;

// Check to see if $user has the administrator role.
if (in_array('administrator', array_values($user->roles))) {
// Do something.
}

На узлах также доступна переменная $is_admin (не уверен, что она всегда ) Для получения дополнительной информации о пользователе массив $user будет содержать всю необходимую информацию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...