Comment masquer un champ utilisateur personnalisé dans le profil utilisateur?

20

Dans Drupal 7, quelle est la meilleure façon d'empêcher un utilisateur non administratif de modifier un champ de profil utilisateur personnalisé?

Cas d'utilisation: j'ai créé un champ utilisateur appelé "ID client" que je ne souhaite pas que l'utilisateur (l'un de mes clients réels) modifie. Le champ existe pour ma propre référence et pour une utilisation programmatique dans d'autres modules. Cela ne me dérange pas que l'utilisateur voit l'ID client, mais il ne devrait pas être en mesure de le modifier.

Dois-je remplacer le modèle de page pour la page de profil utilisateur? Si oui, comment le modèle est-il modifié pour rendre un champ en lecture seule ou invisible?

Merci beaucoup pour votre aide!

Chris

ctlarsen
la source

Réponses:

17

Je pense que les autorisations de champ sont ce que vous recherchez. Voici une citation à ce sujet (à partir de la page du projet du module):

... permet aux administrateurs de site de définir des autorisations au niveau du champ pour modifier, afficher et créer des champs sur n'importe quelle entité.

Caractéristiques :

  • Activez les autorisations de champ sur n'importe quelle entité, pas seulement sur les nœuds.
  • Autorisations de champ basées sur les rôles permettant différents modèles d'affichage en fonction de l'accès dont dispose l'utilisateur.
  • Les autorisations au niveau de l'auteur permettent d'afficher et de modifier des champs en fonction de l'identité du propriétaire de l'entité.
  • Les autorisations pour chaque champ ne sont pas activées par défaut. Au lieu de cela, les administrateurs peuvent activer ces autorisations explicitement pour les champs où cette fonctionnalité est nécessaire.
  • Présentation des autorisations de champ
pasine
la source
Merci, notme! J'ai installé le module des autorisations de champ (la version alpha est la plus récente, ce qui me rend un peu nerveux, mais peu importe), et il masque le champ à l'utilisateur lorsque l'utilisateur affiche son profil. Après avoir expérimenté tous les paramètres du module, il ne semble pas y avoir de moyen de rendre le champ visible mais en lecture seule. Pas une exigence absolue, mais ce serait bien d'avoir.
ctlarsen
La définition d'un champ pour qu'il soit visible signifie qu'un champ de texte est affiché en texte brut. Si vous souhaitez conserver le champ de texte et le définir en lecture seule, je suppose que vous devez utiliser un hook_form_alter sur votre formulaire.
pasine
Merci encore, notme. Je vais prendre la route hook_form_alter et voir où cela me mène. Il semble que ce soit la meilleure façon de procéder.
ctlarsen
Le module Field Permissionsfonctionne très bien avec Drupal 8 mais vous ne pouvez masquer que les champs personnalisés je pense (j'avais besoin de hyde aussi le nom d'utilisateur)
Sébastien Gicquel
5

Pour masquer le champ du formulaire de profil utilisateur, vous pouvez définir la #accesspropriété d'un champ sur FAUX à l'aide de hook_form_FORMID_alter.

L'extrait de code suivant masque le champ field_organisationdu formulaire de profil utilisateur pour les non-administrateurs:

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

Voir aussi cette question similaire sur les drupalanswers

Vous pouvez également masquer le champ de la page de profil utilisateur (pas le formulaire) à l'aide de template_preprocess_user_profile

L'extrait de code suivant masque le champ field_organisationde la page utilisateur pour les non-administrateurs:

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

Il semble y avoir un module appelé http://drupal.org/project/user_readonly "Le module permet à un administrateur d'empêcher la modification des champs de compte / profil utilisateur. L'administrateur peut sélectionner quels champs seront interdits, ou quels champs seront permis."

Jayesh Jose
la source