Qual è la differenza tra gli argomenti di accesso e il callback di accesso?


21

Qual è la differenza tra gli argomenti di accesso e il callback di accesso?

Supponiamo di impostare il callback di accesso su 'user_access', ed array('custom permission')è il valore per gli argomenti di accesso.

Cosa significa? In che modo si influenzano a vicenda?

Risposte:


27

"Access callback" è la funzione chiamata per verificare che l'utente abbia accesso alla pagina. Come caso speciale, potrebbe essere il valore TRUEe in tal caso tutti gli utenti avrebbero accesso ad esso; in altre parole, l'autorizzazione di accesso verrebbe ignorata.

Nel caso in cui si stia utilizzando un nome di funzione per il valore "richiamata accesso" (per impostazione predefinita, si tratta di "accesso_utente"), è possibile utilizzare anche "argomenti di accesso", che è un array contenente gli argomenti passati alla funzione di richiamata accesso.
Come con altri callback di menu, gli argomenti devono essere una stringa o un numero; nel caso sia un numero, il valore verrà sostituito con un valore preso dal percorso del menu. Se vuoi evitare questa sostituzione, invece di un numero devi usare una stringa; ad esempio, l'utilizzo "1"come uno per gli argomenti passati al callback di accesso eviterebbe la sostituzione automatica.

Questi sono alcuni esempi di dichiarazioni di callback di menu utilizzate dai moduli core di Drupal. (Gli esempi provengono dal codice Drupal 7, ma per quello che voglio sottolineare, questo non fa alcuna differenza.)

Questo è un esempio in cui il callback di accesso è 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,
  );

Questo è un esempio in cui il callback di accesso non è un nome di funzione.

  $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',
  );

In questo caso, il callback di accesso è user_view_access () al quale viene passato, non il numero 1, ma un valore preso dal percorso del menu (che in questo caso è "user /% user"); questo è un caso particolare, poiché la funzione otterrà il valore restituito da 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',
  );

Supponiamo che il menu precedente sia stato definito come segue e invocato con un percorso come "utente / ciao".

  $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',
  );

In questo caso, il callback di accesso avrebbe ricevuto come argomento il valore preso dal percorso (0 significa "utente" e 1 indica la parte dopo "utente" e la barra); in questo caso, quel valore è "ciao".

Per comprendere meglio questi argomenti con caratteri jolly, vedere Argomenti Caricatore caratteri jolly . La pagina della documentazione è contrassegnata con Drupal 6, ma quanto riportato è ancora valido per Drupal 7.


spiegazione fantastica. Nel mio requisito, un pulsante personalizzato dice che "vota ora" deve essere elaborato solo da un utente autenticato, ma il pulsante deve essere mostrato anche ad anonimo e quando un utente anonimo fa clic sul reindirizzamento alla pagina di accesso e il processo continua. Per questo particolare scenario esiste una condizione di accesso speciale per mostrare il pulsante ad anonimo ?. Commentando qui perché renderebbe questo post wiki più completo. Segnalibro .. :)
kiranking

4

La richiamata di accesso è una funzione che esamina se alcuni utenti dispongono di autorizzazioni. Il callback di accesso predefinito è user_access ()

L'autorizzazione elenca gli argomenti degli argomenti che vengono esaminati dal callback di accesso. ad es. "accedi ai contenuti"


Cos'altro potrebbe essere un valore per access callback? Se fosse qualcosa di diverso user_access(), ciò eliminerebbe la necessità di access arguments?
user1359

2
Tutto quello che vuoi. Qualsiasi funzione che restituisce VERO o FALSO.
Berdir,

Quindi non ne avresti bisogno access arguments?
user1359

Sì, allora puoi saltarlo
Shoaib Nawaz,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.