ограничить пользователя от определенной роли, чтобы изменить свою электронную почту

10

Есть ли способ, которым я могу ограничить пользователей от определенной роли, чтобы изменить их адрес электронной почты. После того, как они зарегистрированы, мне нужно, чтобы они не могли изменить его на странице настроек редактирования. Я нашел, как ограничить, чтобы изменить имя пользователя, но не адрес электронной почты.

Я использую Drupal 7. Спасибо заранее :)

cayerdis
источник

Ответы:

8

Другой способ программно в вашем пользовательском модуле

function mymodule_form_alter(&$form,$form_state,$form_id) {
   global $user;
    if ($form_id == "user_profile_form") {
       if(in_array('your role',$user->roles) && isset($form['account'])) {
           $form['account']['mail']['#disabled']=TRUE;
          }
      }
 }
Юсеф
источник
5

Используйте модуль защиты пользователя :

Этот модуль позволяет детально контролировать доступ администраторов пользователей, предоставляя пользователям различные возможности редактирования. Средства защиты могут быть специфическими для пользователя или применяться ко всем пользователям в роли.

Хамид Никмер
источник
Я скачал этот модуль, но он не сделал то, что требовалось - он не может помешать пользователю изменить свой пароль. Скорее, он не позволяет ролям администратора изменять пароли ДРУГОГО пользователя.
Литтлединамо
3

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

function mymodule_form_alter(&$form,$form_state,$form_id) {
   global $user;
    if ($form_id == "user_profile_form") {
       if(in_array('Client',$user->roles) && isset($form['account'])) {

           $form['account']['name']['#disabled']=TRUE;
           $form['account']['current_pass']['#disabled']=TRUE;
           $form['account']['current_pass']['#description']='';
           $form['account']['mail']['#disabled']=TRUE;

           unset($form['picture']);
           unset($form['overlay_control']);
          }
      }
 }
leanderl
источник
:). пожалуйста.
Юсеф