Jaka jest różnica między argumentami dostępu a wywołaniem zwrotnym dostępu?

21

Jaka jest różnica między argumentami dostępu a wywołaniem zwrotnym dostępu?

Załóżmy, że ustawiłem wywołanie zwrotne dostępu na wartość 'user_access'i array('custom permission')jest wartością argumentów dostępu.

Co to znaczy? Jak na siebie wpływają?

użytkownik1359
źródło

Odpowiedzi:

27

„Dostęp zwrotny” to funkcja wywoływana w celu sprawdzenia, czy użytkownik ma dostęp do strony. W szczególnym przypadku może to być wartość TRUEiw takim przypadku wszyscy użytkownicy mieliby do niej dostęp; innymi słowy pozwolenie na dostęp zostanie ominięte.

Jeśli używasz nazwy funkcji dla wartości „callback access” (domyślnie jest to „user_access”), możesz także użyć „argumentów dostępu”, czyli tablicy zawierającej argumenty przekazane do funkcji wywołania zwrotnego dostępu.
Podobnie jak w przypadku innych wywołań zwrotnych menu, argumenty muszą być ciągiem lub liczbą; w przypadku, gdy jest to liczba, wartość zostanie zastąpiona wartością pobraną ze ścieżki menu. Jeśli chcesz uniknąć tej zamiany, zamiast liczby musisz użyć łańcucha; na przykład użycie "1"jako jednego argumentu przekazanego do wywołania zwrotnego dostępu pozwoliłoby uniknąć automatycznej zamiany.

Oto kilka przykładów deklaracji zwrotnych menu używanych z podstawowych modułów Drupala. (Przykłady pochodzą z kodu Drupal 7, ale na to, na co chcę zwrócić uwagę, nie robi to żadnej różnicy).

Jest to przykład, w którym wywołanie zwrotne dostępu to 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,
  );

Jest to przykład, w którym wywołanie zwrotne dostępu nie jest nazwą funkcji.

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

W tym przypadku wywołaniem zwrotnym dostępu jest user_view_access (), do którego przekazywana jest nie liczba 1, ale wartość pobrana ze ścieżki menu (która w tym przypadku to „użytkownik /% użytkownik”); jest to szczególny przypadek, ponieważ funkcja otrzyma wartość zwróconą przez 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',
  );

Załóżmy, że poprzednie menu zostało zdefiniowane w następujący sposób i wywołane ze ścieżką typu „użytkownik / cześć”.

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

W tym przypadku wywołanie zwrotne dostępu otrzymałoby jako argument wartość pobraną ze ścieżki (0 oznacza „użytkownik”, a 1 oznacza część za „użytkownikiem” i ukośnik); w tym przypadku ta wartość to „cześć”.

Aby lepiej zrozumieć te argumenty symboli zastępczych, zobacz Argumenty modułu ładującego symbole wieloznaczne . Strona dokumentacji jest oznaczona jako Drupal 6, ale to, co zostało zgłoszone, nadal obowiązuje dla Drupal 7.

kiamlaluno
źródło
niesamowite wyjaśnienie. Zgodnie z moim wymaganiem, jakiś niestandardowy przycisk mówi, że „głosuj teraz” powinien być przetwarzany tylko przez uwierzytelnionego użytkownika, ale przycisk powinien być również wyświetlany anonimowo, a gdy anonimowy użytkownik kliknie, powinien przekierować na stronę logowania i proces będzie kontynuowany. W tym konkretnym scenariuszu istnieje specjalny warunek dostępu, aby pokazać przycisk anonimowemu ?. Komentowanie tutaj, ponieważ uczyniłoby ten post bardziej kompletnym wiki.
Dodane do
4

Oddzwonienie dostępu to funkcja, która sprawdza, czy jakiś użytkownik ma jakieś uprawnienia. Domyślne wywołanie zwrotne dostępu to user_access ()

Argumenty dostępu zawierają listę uprawnień, które są sprawdzane przez wywołanie zwrotne dostępu. np. „dostęp do treści”

Shoaib Nawaz
źródło
Co jeszcze może być wartością access callback? Gdyby to było coś innego user_access(), czy to wyeliminowałoby potrzebę access arguments?
user1359
2
Cokolwiek chcesz. Każda funkcja, która zwraca PRAWDA lub FAŁSZ.
Berdir
Więc nie potrzebujesz access arguments?
user1359
Tak, możesz to pominąć
Shoaib Nawaz