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
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
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']);
}
}
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. "