Как скрыть пользовательское поле в профиле пользователя?

В Drupal 7, каков наилучший способ запретить любому пользователю, не являющемуся администратором, изменять пользовательское поле профиля пользователя?

Случай использования: я создал пользовательское поле под названием «Идентификатор клиента», которое я не хочу, чтобы пользователь (любой из моих фактических клиентов) изменился. Поле существует для моей собственной ссылки и для использования в программах в других модулях. Я не возражаю против того, что пользователь видит идентификатор клиента, но он не должен его редактировать.

Должен ли я переопределить шаблон страницы для страницы профиля пользователя? Если да, то как шаблон изменился, чтобы сделать поле доступным только для чтения или невидимым?

Большое спасибо за вашу помощь!

Крис

19 голосов | спросил ctlarsen 14 Maypm11 2011, 17:27:36

3 ответа


17

Я думаю, что Разрешения на использование поля - это то, что вы ищете. Вот цитата об этом (со страницы проекта модуля):

  

... позволяет администраторам сайтов устанавливать разрешения на уровне поля для редактирования, просмотра и создания полей для любого объекта.

     

Функции

     
  • Разрешить разрешения полей для любого объекта, а не только для узлов.
  •   
  • Разрешения на основе ролей, позволяющие использовать различные шаблоны просмотра на основе того, какой доступ у пользователя.
  •   
  • Разрешения на уровне автора позволяют просматривать и редактировать поля на основе того, кто является владельцем объекта.
  •   
  • Разрешения для каждого поля по умолчанию не включены. Вместо этого администраторы могут явно разрешать эти разрешения для полей, где требуется эта функция.
  •   
  • Обзор разрешений полей
  •   
ответил pasine 14 Maypm11 2011, 18:43:15
4

Чтобы скрыть поле из формы профиля пользователя, вы можете установить для свойства #access значение FALSE с помощью hook_form_FORMID_alter .

Следующий фрагмент скрывает поле field_organisation из формы профиля пользователя для не-админов:

function YOURCUSTOMMODULE_form_user_profile_form_alter(&$form, &$form_state, $form_id) {
  $current_user = user_uid_optional_load();
  if($current_user->uid != 1) {
    $form['field_organisation']['#access'] = FALSE;
  }
}

Смотрите также этот аналогичный вопрос на drupalanswers

Вы также можете скрыть поле со страницы профиля пользователя (а не формы), используя template_preprocess_user_profile

Следующий фрагмент скрывает поле field_organisation со страницы пользователя для не-админов:

function YOURCUSTOMMODULE_preprocess_user_profile(&$vars) {
  $current_user = user_uid_optional_load();
  if($current_user->uid != 1) {
    unset($vars['user_profile']['field_organisation']);
  }
}
ответил batigolix 30 MonEurope/Moscow2013-12-30T17:15:11+04:00Europe/Moscow12bEurope/MoscowMon, 30 Dec 2013 17:15:11 +0400 2013, 17:15:11
1

Кажется, есть модуль под названием http://drupal.org/project/user_readonly «Модуль позволяет администратору предотвратить изменение полей учетной записи пользователя /профиля. Администратор может выбрать, какие поля будут запрещены или какие поля будут разрешены».

ответил Jayesh Jose 8 AMpMon, 08 Apr 2013 09:36:38 +040036Monday 2013, 09:36:38

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132