Як приховати користувацьке поле користувача у профілі користувача?


20

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

Випадок використання: я створив поле користувача під назвою "Ідентифікатор клієнта", яке не хочу, щоб користувач (будь-який із моїх реальних клієнтів) мінявся. Поле існує для мого власного довідника та для програмного використання в інших модулях. Я не заперечую, щоб користувач бачив ідентифікатор клієнта, але він не міг би його редагувати.

Чи слід замінити шаблон сторінки для сторінки профілю користувача? Якщо так, то як змінюється шаблон, щоб зробити поле лише для читання чи невидимим?

Велике спасибі за вашу допомогу!

Кріс

Відповіді:


17

Я думаю, що поле Permissions - це те, що ви шукаєте. Ось цитата про це (зі сторінки проекту модуля):

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

Особливості :

  • Увімкніть дозволи поля для будь-якої сутності, а не лише вузлів.
  • Поле дозволів на основі ролей, що дозволяє різним малюнкам перегляду з урахуванням того, який доступ має користувач.
  • Дозволи на рівні автора дозволяють переглядати та редагувати поля залежно від того, хто є власником організації.
  • Дозволи для кожного поля за замовчуванням не включені. Натомість адміністратори можуть увімкнути ці дозволи прямо для полів, де необхідна ця функція.
  • Огляд дозволів на місцях

Дякую, поміч! Я встановив модуль польових дозволів (альфа-версія остання, що мене трохи нервує, але що б там не було), і він приховує поле від користувача, коли користувач переглядає його профіль. Після експерименту з усіма параметрами модуля, схоже, не існує способу зробити поле видимим, а лише для читання. Не абсолютна вимога, але було б непогано мати.
ctlarsen

Визначення поля видимим означає, що текстове поле відображається як звичайний текст. Якщо ви хочете зберегти текстове поле і встановити його як лише для читання, я думаю, ви повинні використовувати гачку_форму_альтер у своїй формі.
пасінь

Ще раз дякую, зауважте. Я пройдусь по маршруту hoke_form_alter і побачу, куди це мене веде. Здається, це найкращий шлях.
ctlarsen

Модуль Field Permissionsвідмінно працює з Drupal 8, але ви можете приховати лише власні поля, на які я думаю (мені потрібно було також хиднути ім’я користувача)
Sébastien Gicquel

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

Дивіться також подібне запитання щодо дружинників

Ви також можете приховати поле на сторінці профілю користувача (не у формі), використовуючи 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']);
  }
}

1

Здається, є модуль під назвою http://drupal.org/project/user_readonly "Модуль дозволяє адміністратору запобігти зміні полів облікового запису / профілю профілю. Адміністратор може вибрати, які поля будуть заборонені або які поля будуть дозволено ".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.