restringir al usuario de cierto rol para cambiar su correo electrónico

10

¿Hay alguna manera de restringir a los usuarios de un determinado rol para cambiar su dirección de correo electrónico? Una vez que estén registrados, no los necesito para poder cambiarlo en la página de configuración de edición. Encontré cómo restringir para cambiar el nombre de usuario pero no el correo electrónico.

Estoy usando Drupal 7. Gracias de antemano :)

cayerdis
fuente

Respuestas:

8

Otra forma es programáticamente en su módulo personalizado

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
fuente
5

Utilice el módulo de protección del usuario :

Este módulo permite un control de acceso detallado de los administradores de usuarios, al proporcionar varias protecciones de edición para los usuarios. Las protecciones pueden ser específicas para un usuario o aplicarse a todos los usuarios en un rol.

Hamid Nikmehr
fuente
Descargué este módulo pero no hizo lo que se requería: no puede evitar que un usuario cambie su propia contraseña. Más bien, evita que los roles de administrador cambien las contraseñas de OTROS usuarios.
littledynamo
3

Zhilevan: gracias por el buen código para ayudarme a resolver este problema rápidamente. Tengo un sitio en el que existe un rol genérico de inicio de sesión "cliente" para que los clientes puedan cargar y descargar archivos. La cuenta de usuario se compartirá entre potencialmente muchos clientes para una carga o descarga "única" y no queremos que alteren el nombre de usuario, la contraseña o cualquier otra cosa para esta cuenta genérica. Estoy seguro de que hay formas más elegantes de hacer esto, pero aquí está mi código para "cerrar la opción de edición" en función del rol del usuario. (Probé el módulo de protección del usuario, pero no pude hacerlo funcionar). Aquí está mi código en caso de que alguien más lo encuentre útil.

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
fuente
:). de nada.
Yusef