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

20

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

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

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

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

Крис

ctlarsen
источник

Ответы:

17

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

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

Особенности :

  • Включите права доступа к полям для любого объекта, а не только для узлов.
  • Полевые разрешения на основе ролей, позволяющие различать шаблоны просмотра в зависимости от того, какой доступ имеет пользователь.
  • Права на уровне автора позволяют просматривать и редактировать поля в зависимости от того, кто является владельцем объекта.
  • Разрешения для каждого поля не включены по умолчанию. Вместо этого администраторы могут явно включить эти разрешения для полей, где требуется эта функция.
  • Обзор разрешений на местах
pasine
источник
Спасибо, не так! Я установил модуль Field Permissions (альфа-версия является последней, что заставляет меня немного нервничать, но неважно), и он скрывает поле от пользователя, когда пользователь просматривает его профиль. После экспериментов со всеми настройками модуля, кажется, нет способа сделать поле видимым, но только для чтения. Не абсолютное требование, но было бы неплохо иметь.
ctlarsen
Установка поля видимым означает, что текстовое поле отображается в виде обычного текста. Если вы хотите сохранить текстовое поле и установить его только для чтения, я думаю, вы должны использовать hook_form_alter в своей форме.
Пасина
Еще раз спасибо, notme. Я возьму маршрут hook_form_alter и посмотрю, куда меня это приведет. Похоже, это лучший способ пойти.
ctlarsen
Модуль Field Permissionsотлично работает с Drupal 8, но вы можете скрыть только пользовательские поля, которые я думаю (мне нужно было также
Sébastien
5

Чтобы скрыть поле из формы профиля пользователя, вы можете установить для #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
источник
1

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

Джаеш Хосе
источник