access_callback hook_menu

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,

J'ai créé un petit module maison tout bête pour permettre à l'admin de modifier uniquement le titre d'un seul bloc.

Donc au début de mon module, je fais donc un hook_menu pour créer le chemin vers ma page qui contiendra mon form.

Mon problème c'est que je n'ai pas tout compris sur l'access callback.

Je souhaiterais que seul les utilisateurs qui ont un rôle "admin" puissent y accéder.

Dois je faire quelque chose dans ce style?

<?php
function titre_bloc_menu() {
 
$items['titre-bloc']=array(
     
'title' => 'Changer titre bloc promo',
     
'page callback' => 'titre_bloc_page',
      
'access callback' => 'ma_fonction_test_role',
       );
 return
$items;
}

function
ma_fonction_test_role() {
 
//recupere les roles de lutilisateur courant
 //si ds mes roles j'ai le role admin alors return TRUE sinon return FALSE ?
?>

Merci de me dire si je suis dans la bonne direction

Forum : 
Version de Drupal : 

Le principe de l'access callback c'est une fonction qui va renvoyer TRUE si l'accès est autorisé. Tu peux spécifier des paramètres à la callback par l'attribut "access argument", par exemple :

<?php
$item
['bidule/%node'] = array(
  ....
 
'access callback' => 'node_access',
 
'access arguments' => array('update', 1),
   ...
);
?>

Dans ce cas, la callback est node_access qui prend deux arguments minimul, l'opération à vérifier sur le node (ici 'update', et le node sur lequel l'action doit porter (ici le %node, qui est au niveau 1 du chemin).

Par défaut, si l'attribut n'est pas spécifié, sa valeur est 'user_access', qui prend lui en argument une permission. Donc un moyen d'arriver à tes fins sans écrire une fonction est de ne pas spécifier access callback, mais de mettre un access arguments avec comme valeur array('access administration pages') qui généralement est l'apanage des administrateur.

merci pour cette réponse très complète qui m'éclaire énormément.

Pour ce qui est de la valeur par exemple 'access administration pages', comment puis-je connaître les autres valeurs des permissions que peut prendre acess arguments?

Finalement pour mon module, j'ai fait ceci, peut-on l'améliorer?

<?php
//hook pour creer chemin systeme
function titre_bloc_menu() {
 
$items['titre-bloc']=array(
     
'title' => 'Changer titre bloc promo',
     
'page callback' => 'titre_bloc_page',
      
'access callback' => 'role_autorise',
       );
 return
$items;
}

function
role_autorise (){
   global
$user;

       
//roles[3] correspond à mon role admin
 
if ($user->roles[3]) $affichage=1;

 if(
$affichage==1){
     return
TRUE;
   } else {
       return
FALSE;
  }
 
}
?>