web-dev-qa-db-fra.com

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

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 (aucun 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

19
ctlarsen

Je pense que Field Permissions est 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
17
pasine

Pour masquer le champ du formulaire de profil utilisateur, vous pouvez définir le #access propriété d'un champ à FALSE en utilisant hook_form_FORMID_alter .

L'extrait suivant masque le champ field_organisation à partir du 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) en utilisant template_preprocess_user_profile

L'extrait suivant masque le champ field_organisation depuis 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']);
  }
}
5
batigolix

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 les champs qui seront ou quels champs seront autorisés. "

1
Jayesh Jose