Quelle est la différence entre les arguments d'accès et le rappel d'accès?


21

Quelle est la différence entre les arguments d'accès et le rappel d'accès?

Supposons que je définisse le rappel d'accès sur 'user_access', et array('custom permission')soit la valeur des arguments d'accès.

Qu'est-ce que ça veut dire? Comment affectent-ils les uns les autres?

Réponses:


27

"Rappel d'accès" est la fonction qui est appelée pour vérifier que l'utilisateur a accès à la page. Dans un cas particulier, il pourrait s'agir de la valeur TRUE, et dans ce cas, tous les utilisateurs y auraient accès; en d'autres termes, l'autorisation d'accès serait contournée.

Dans le cas où vous utilisez un nom de fonction pour la valeur "rappel d'accès" (par défaut, c'est "user_access"), vous pouvez également utiliser "arguments d'accès", qui est un tableau contenant les arguments passés à la fonction de rappel d'accès.
Comme pour les autres rappels de menu, les arguments doivent être une chaîne ou un nombre; dans le cas où il s'agit d'un nombre, la valeur sera remplacée par une valeur prise dans le chemin du menu. Si vous voulez éviter ce remplacement, au lieu d'un nombre, vous devez utiliser une chaîne; par exemple, l'utilisation "1"comme un pour les arguments passés au rappel d'accès éviterait le remplacement automatique.

Ce sont quelques exemples de déclarations de rappel de menu utilisées à partir des modules principaux de Drupal. (Les exemples proviennent du code Drupal 7, mais pour ce que je veux souligner, cela ne fait aucune différence.)

Il s'agit d'un exemple où le rappel d'accès est user_access () .

  $items['file/progress'] = array(
    'page callback' => 'file_ajax_progress', 
    'delivery callback' => 'ajax_deliver', 
    'access arguments' => array('access content'), 
    'theme callback' => 'ajax_base_page_theme', 
    'type' => MENU_CALLBACK,
  );

Il s'agit d'un exemple où le rappel d'accès n'est pas un nom de fonction.

  $items['user'] = array(
    'title' => 'User account', 
    'title callback' => 'user_menu_title', 
    'page callback' => 'user_page', 
    'access callback' => TRUE, 
    'file' => 'user.pages.inc', 
    'weight' => -10, 
    'menu_name' => 'user-menu',
  );

Dans ce cas, le rappel d'accès est user_view_access () auquel est passé, pas le numéro 1, mais une valeur tirée du chemin de menu (qui dans ce cas est "user /% user"); c'est un cas particulier, car la fonction obtiendra la valeur renvoyée par user_load().

  $items['user/%user'] = array(
    'title' => 'My account', 
    'title callback' => 'user_page_title', 
    'title arguments' => array(1), 
    'page callback' => 'user_view_page', 
    'page arguments' => array(1), 
    'access callback' => 'user_view_access', 
    'access arguments' => array(1),
    // By assigning a different menu name, this item (and all registered child
    // paths) are no longer considered as children of 'user'. When accessing the
    // user account pages, the preferred menu link that is used to build the
    // active trail (breadcrumb) will be found in this menu (unless there is
    // more specific link), so the link to 'user' will not be in the breadcrumb. 
    'menu_name' => 'navigation',
  );

Supposons que le menu précédent ait été défini comme suit et appelé avec un chemin d'accès tel que "utilisateur / bonjour".

  $items['user/%'] = array(
    'title' => 'My account', 
    'title callback' => 'user_page_title', 
    'title arguments' => array(1), 
    'page callback' => 'user_view_page', 
    'page arguments' => array(1), 
    'access callback' => 'user_view_access', 
    'access arguments' => array(1),
    // By assigning a different menu name, this item (and all registered child
    // paths) are no longer considered as children of 'user'. When accessing the
    // user account pages, the preferred menu link that is used to build the
    // active trail (breadcrumb) will be found in this menu (unless there is
    // more specific link), so the link to 'user' will not be in the breadcrumb. 
    'menu_name' => 'navigation',
  );

Dans ce cas, le rappel d'accès aurait reçu en argument la valeur tirée du chemin (0 signifie "utilisateur" et 1 signifie la partie après "utilisateur" et la barre oblique); dans ce cas, cette valeur est "bonjour".

Pour mieux comprendre ces arguments génériques, consultez Arguments du chargeur générique . La page de documentation est étiquetée Drupal 6, mais ce qui a été signalé reste valable pour Drupal 7.


explication impressionnante. Dans mon exigence, un bouton personnalisé disant "voter maintenant" ne doit être traité que par un utilisateur authentifié, mais le bouton doit également être montré anonyme et lorsque l'utilisateur anonyme clique sur qu'il doit rediriger vers la page de connexion et le processus se poursuit. Pour ce scénario particulier, existe-t-il une condition d'accès spéciale pour afficher le bouton sur anonyme?. Commenter ici car cela rendrait ce post plus complet du wiki. Ajouter aux favoris .. :)
kiranking

4

Le rappel d'accès est une fonction qui examine si certains utilisateurs ont des autorisations. Le rappel d'accès par défaut est user_access ()

La liste des arguments d'accès autorise ceux qui sont examinés par rappel d'accès. par exemple "accéder au contenu"


Pour quoi d'autre pourrait être une valeur access callback? S'il s'agissait d'autre chose user_access(), est-ce que cela éliminerait le besoin de access arguments?
user1359

2
Tout ce que vous voulez. Toute fonction qui renvoie VRAI ou FAUX.
Berdir

Alors vous n'en auriez pas besoin access arguments?
user1359

Oui, alors vous pouvez le sauter
Shoaib Nawaz
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.