ograniczyć użytkownikowi określoną rolę, aby zmienić jego adres e-mail

10

Czy mogę w jakiś sposób ograniczyć użytkownikom określoną rolę do zmiany adresu e-mail. Po ich zarejestrowaniu potrzebuję ich nie, aby móc to zmienić na stronie ustawień edycji. Znalazłem sposób ograniczenia, aby zmienić nazwę użytkownika, ale nie e-mail.

Korzystam z Drupal 7. Dzięki zaawansowany :)

Cayerdis
źródło

Odpowiedzi:

8

Innym sposobem jest programowo w niestandardowym module

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;
          }
      }
 }
Yusef
źródło
5

Użyj modułu ochrony użytkownika :

Moduł ten pozwala na szczegółową kontrolę dostępu administratorów użytkowników, zapewniając użytkownikom różne zabezpieczenia edycji. Zabezpieczenia mogą być specyficzne dla użytkownika lub mieć zastosowanie do wszystkich użytkowników w roli.

Hamid Nikmehr
źródło
Pobrałem ten moduł, ale nie zrobił tego, co było wymagane - nie jest w stanie uniemożliwić użytkownikowi zmiany własnego hasła. Przeciwnie, uniemożliwia rolom administracyjnym zmianę haseł INNEGO użytkownika.
littledynamo
3

zhilevan - dziękuję za ładny kod, który pomaga mi szybko zacząć rozwiązywać ten problem. Mam witrynę, na której istnieje ogólna nazwa użytkownika „klient” do logowania, aby klienci mogli przesyłać i pobierać pliki. Konto użytkownika zostanie udostępnione potencjalnie wielu klientom do jednorazowego przesłania lub pobrania, a my nie chcemy, aby zmieniali nazwę użytkownika, hasło lub jakiekolwiek inne rzeczy dla tego ogólnego konta. Jestem pewien, że istnieją bardziej eleganckie sposoby na zrobienie tego, ale oto mój kod „wyłączania opcji edycji” w zależności od roli użytkownika. (Wypróbowałem moduł ochrony użytkownika, ale nie mogłem go uruchomić). Oto mój kod na wypadek, gdyby ktokolwiek uznał go za przydatny.

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
źródło
:) proszę bardzo.
Yusef