¿Cómo ocultar un campo de usuario personalizado en el perfil de usuario?

20

En Drupal 7, ¿cuál es la mejor manera de evitar que un usuario no administrativo cambie un campo de perfil de usuario personalizado?

Caso de uso: he creado un campo de usuario llamado "ID de cliente" que no quiero que cambie el usuario (ninguno de mis clientes reales). El campo existe para mi propia referencia y para uso programático en otros módulos. No me importa que el usuario vea la identificación del cliente, pero no debería poder editarla.

¿Debo anular la plantilla de página para la página de perfil de usuario? Si es así, ¿cómo se cambia la plantilla para hacer que un campo sea de solo lectura o invisible?

¡Muchas gracias por su ayuda!

Chris

ctlarsen
fuente

Respuestas:

17

Creo que los permisos de campo es lo que estás buscando. Aquí hay una cita al respecto (de la página del proyecto del módulo):

... permite a los administradores del sitio establecer permisos de nivel de campo para editar, ver y crear campos en cualquier entidad.

Caracteristicas :

  • Habilite los permisos de campo en cualquier entidad, no solo en los nodos.
  • Permisos de campo basados ​​en roles que permiten una visualización diferente según el acceso del usuario.
  • Los permisos a nivel de autor permiten ver y editar campos en función de quién es el propietario de la entidad.
  • Los permisos para cada campo no están habilitados de forma predeterminada. En cambio, los administradores pueden habilitar estos permisos explícitamente para los campos donde se necesita esta característica.
  • Resumen de permisos de campo
pasine
fuente
Gracias notme! He instalado el módulo de Permisos de campo (la versión alfa es la última, lo que me pone un poco nervioso, pero lo que sea), y oculta el campo al usuario cuando el usuario ve su perfil. Después de experimentar con todas las configuraciones del módulo, no parece haber una manera de hacer que el campo sea visible sino de solo lectura. No es un requisito absoluto, pero sería bueno tenerlo.
ctlarsen
Establecer un campo como visible significa que un campo de texto se muestra como texto sin formato. Si desea conservar el campo de texto y configurarlo como de solo lectura, supongo que debe usar un hook_form_alter en su formulario.
pasine
Gracias de nuevo, notme. Tomaré la ruta hook_form_alter y veré a dónde me lleva eso. Parece que es el mejor camino a seguir.
ctlarsen
El módulo Field Permissionsfunciona bien con Drupal 8, pero creo que solo puede ocultar campos personalizados (necesitaba hyde también el nombre de usuario)
Sébastien Gicquel
5

Para ocultar el campo del formulario de perfil de usuario, puede establecer la #accesspropiedad de un campo en FALSO utilizando hook_form_FORMID_alter.

El siguiente fragmento oculta el campo field_organisationdel formulario de perfil de usuario para no administradores:

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

Ver también esta pregunta similar en drupalanswers

También puede ocultar el campo desde la página de perfil de usuario (no el formulario) usando template_preprocess_user_profile

El siguiente fragmento oculta el campo field_organisationde la página del usuario para los no administradores:

function YOURCUSTOMMODULE_preprocess_user_profile(&$vars) {
  $current_user = user_uid_optional_load();
  if($current_user->uid != 1) {
    unset($vars['user_profile']['field_organisation']);
  }
}
batigolix
fuente
1

Parece que hay un módulo llamado http://drupal.org/project/user_readonly "El módulo permite que un administrador evite la modificación de los campos de cuenta / perfil de usuario. El administrador puede seleccionar qué campos serán rechazados o cuáles serán permitido."

Jayesh Jose
fuente