Was ist der Unterschied zwischen Zugriffsargumenten und Zugriffsrückruf?

21

Was ist der Unterschied zwischen Zugriffsargumenten und Zugriffsrückruf?

Angenommen, ich setze den Zugriffsrückruf auf 'user_access'und array('custom permission')ist der Wert für die Zugriffsargumente.

Was bedeutet das? Wie beeinflussen sie sich gegenseitig?

user1359
quelle

Antworten:

27

"Zugriffsrückruf" ist die Funktion, die aufgerufen wird, um zu überprüfen, ob der Benutzer Zugriff auf die Seite hat. Als Sonderfall kann dies der Wert sein TRUE, auf den in diesem Fall alle Benutzer zugreifen können. Mit anderen Worten, die Zugriffsberechtigung würde umgangen.

Wenn Sie einen Funktionsnamen für den Wert "access callback" verwenden (standardmäßig "user_access"), können Sie auch "access arguments" verwenden. Hierbei handelt es sich um ein Array, das die an die Access Callback-Funktion übergebenen Argumente enthält.
Wie bei anderen Menürückrufen müssen die Argumente eine Zeichenfolge oder eine Zahl sein. Falls es sich um eine Zahl handelt, wird der Wert durch einen Wert aus dem Menüpfad ersetzt. Wenn Sie diese Ersetzung vermeiden möchten, müssen Sie anstelle einer Zahl eine Zeichenfolge verwenden. Die Verwendung von "1"as one für die an den Zugriffsrückruf übergebenen Argumente würde beispielsweise das automatische Ersetzen vermeiden.

Dies sind einige Beispiele für Menü-Callback-Deklarationen, die von Drupal-Kernmodulen verwendet werden. (Die Beispiele stammen aus Drupal 7-Code, aber für das, worauf ich hinweisen möchte, macht das keinen Unterschied.)

Dies ist ein Beispiel, in dem der Zugriffsrückruf user_access () lautet .

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

Dies ist ein Beispiel, in dem der Zugriffsrückruf kein Funktionsname ist.

  $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 diesem Fall ist der Zugriffsrückruf user_view_access (), an den übergeben wird, nicht die Nummer 1, sondern ein Wert aus dem Menüpfad ( in diesem Fall "user /% user"). Dies ist ein besonderer Fall, da die Funktion den von zurückgegebenen Wert erhält 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',
  );

Angenommen, das vorherige Menü wurde wie folgt definiert und mit einem Pfad wie "user / hello" aufgerufen.

  $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 diesem Fall hätte der Zugriffsrückruf als Argument den Wert aus dem Pfad erhalten (0 bedeutet "Benutzer" und 1 bedeutet den Teil nach "Benutzer" und den Schrägstrich); In diesem Fall ist dieser Wert "Hallo".

Weitere Informationen zum besseren Verständnis dieser Platzhalterargumente finden Sie unter Argumente für den Platzhalterlader . Die Dokumentationsseite trägt den Tag Drupal 6, was jedoch gemeldet wird, gilt weiterhin für Drupal 7.

kiamlaluno
quelle
tolle Erklärung. In meiner Anforderung sollte eine benutzerdefinierte Schaltfläche "Jetzt abstimmen" nur von einem authentifizierten Benutzer verarbeitet werden, die Schaltfläche sollte jedoch auch anonym angezeigt werden. Wenn ein anonymer Benutzer auf diese Schaltfläche klickt, sollte er zur Anmeldeseite umleiten und den Vorgang fortsetzen. Gibt es für dieses spezielle Szenario eine spezielle Zugriffsbedingung, um die Schaltfläche anonym anzuzeigen ?. Hier zu kommentieren, da dies den Beitrag vollständiger machen würde. Bookmarked .. :)
kiranking
4

Access Callback ist eine Funktion, die prüft, ob ein Benutzer über Berechtigungen verfügt. Der Standardzugriffsrückruf lautet user_access ().

Zugriffsargumente listet Berechtigungen auf, die durch einen Zugriffsrückruf geprüft werden. zB "auf Inhalte zugreifen"

Shoaib Nawaz
quelle
Wofür könnte sonst ein Wert sein access callback? Wenn es etwas anderes wäre als user_access(), würde dies die Notwendigkeit von vermeiden access arguments?
user1359
2
Irgendwas du willst. Jede Funktion, die TRUE oder FALSE zurückgibt.
Berdir
Also würdest du das nicht brauchen access arguments?
user1359
Ja, dann können Sie es überspringen
Shoaib Nawaz