2010-07-04 4 views
0

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

ответ

0
global $user; 

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

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

+0

Может ли это быть использовано в качестве сниппета? – Toxid

+0

Ну, просто попробуйте это;), он должен работать, но имейте в виду, что на каждой странице трудно поддерживать, поэтому модуль/функция/.. будет лучшим решением в таком acase – DrColossos

0

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

0

Права доступа к CCK.

+0

Не думаю, что вопрос специфично для полей CCK. – Grayside

0

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

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

<?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. Если вы захотите пропустить полную распечатку из структуры формы, вставьте в нее drupal_set_message(print_r($form, TRUE)); в вашей реализации hook_form_alter(), чтобы увидеть, что там есть. Еще лучше, установите Devel, а затем вы можете получить более приятный тематический вывод, вставив dpm($form);.

Смежные вопросы