Empêcher l'édition d'un champ du profil d'un utilisateur

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour amis drupaliens =)

J'ai un petit soucis avec la gestion des profils utilisateur, un champ est réservé à l'administrateur pour communiquer une information particulière (désolé vous n'en saurez pas plus :p) et j'aimerais que l'utilisateur ne puisse éditer ce champ.

J'ai tenté d'utiliser le module 'profile permission', mais le champ en plus d'être impossible à éditer n'était pas non plus visible. Comment faire ?

Version de Drupal : 

Bonjour,

Je suppose que ce champ a été crée à l'aide de CCK ?
Dans ce cas dans ta liste des modules dans le groupe CCK tu en as un qui s'appelle "Content Permissions" => il te permet d'ajuster l'accès des utilisateurs pour chaque champ CCK.

arf, j'ai mal supposé...
Du coup je ne sais pas trop comment faire, peut-être quelqu'un de plus doué que moi pourras t'éclairer.
Mais tu n'utilises pas du tout CCK sur ton site ? Si tu l'utilises ailleurs, l'ajout d'un simple champ dans un profil n'est pas un problème, le module est fait pour ça !
Sinon, à moins que tu veuilles à tout prix éviter d'ajouter un module peu utile pour ton usage, je ne peux que te conseiller de l'installer.

J'ai utilisé cette technique, mais plusieurs choses m'ont déplus :

  • La présence du champ titre (l'option qui permet de le cacher n'a pas fonctionner pour une raison inconnue).
  • La présentation générale avec les lignes collées les unes aux autres (j'imagine qu'il est possible de remédier à ça en modifiant le fichier template associé).

C'est certes une solution, mais la mise en œuvre est bien plus complexe et fastidieuse à mon sens. Aussi si il existe une autre solution je suis tout ouïe =).

Mais l'utilisateur aussi doit pouvoir voir ce que contient ce champ, pas seulement l'admin. Ce que je souhaite c'est que les 2 puisse voir ce champ mais que seul l'admin puisse le modifier.

Ben moi j'avais un peu le même soucis que toi et après plusieurs prises de tête, je me suis créer un petit module pour modifier le formulaire...

En partant du principe que mon module se nomme "monmodule" et que dans le module "Profile" j'ai créer un champ "profile_soldepoints" dans la catégorie "Informations Club", voici le bout de code à insérer dans le fichier "monmodule.module".

/**
* Implementation of hook_form_alter().
* @ingroup form
*/
function monmodule_form_alter(&$form, &$form_state, $form_id) {
    switch ($form_id) {
        case 'user_profile_form':
            if ($form['Informations Club']) {
                // Gestion des droits d'accès
             foreach($form['_account']['#value']->roles as $key => $value) {
                  switch($key) {
                     // Rôle superadmin
                     case 3:
                            $allow_to_see = 1;
                     break;
                     default:
                           $allow_to_see = 0;
                     break;
                 }
              }
              // Désactivation du champ "Nombre de points club"
                if ($form['Informations Club']['profile_soldepoints']) {
                   if (!$allow_to_see) {
                      $form['Informations Club']['profile_soldepoints']['#attributes'] = array('disabled' => 'disabled');
                   }
              }
          }
      break;
     default:
       break;
}
}

Ainsi mon champ est visible quelque soit le rôle mais il est grisé (désactivé) si la personne n'a pas le rôle de superadmin (rôle 3 sur mon site) => Seuls les admins peuvent éditer ce champ.

Après je ne te cache pas qu'un petit malin qui utiliserait firebug ou un outil similaire pourrait aisément levé cette protection... Soucis sur lequel il va falloir que je me penche maintenant que je viens de m'en apercevoir !