アクセス引数とアクセスコールバックの違いは何ですか?


21

アクセス引数とアクセスコールバックの違いは何ですか?

私はへのアクセスのコールバックを設定すると仮定'user_access'し、array('custom permission')アクセス引数の値です。

どういう意味ですか?それらは互いにどのように影響しますか?

回答:


27

「アクセスコールバック」は、ユーザがページへのアクセス権を持って検証するために呼び出される関数です。特別な場合として、それが値である可能性がありTRUE、その場合には、すべてのユーザーがそれにアクセスすることができます。言い換えれば、アクセス許可がバイパスされることになります。

「アクセスコールバック」値に関数名(デフォルトでは「user_access」)を使用している場合は、アクセスコールバック関数に渡される引数を含む配列である「アクセス引数」も使用できます。
他のメニューのコールバックと同じように、引数は、文字列、または数値でなければなりません。それは数だ場合には、値がメニューパスから取得した値に置き換えられます。あなたの代わりに番号で、この交換を避けたい場合は、文字列を使用する必要があります。例えば、使用して"1"自動置換を回避するアクセスコールバックに渡される引数の一つとして。

これらは、Drupalコアモジュールから使用されるメニューコールバック宣言の例です。(例はDrupal 7コードからのものですが、私が指摘したいことのために、それは違いを生じません。)

これは、アクセスコールバックが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,
  );

これは、アクセスコールバックが関数名ではない例です。

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

この場合、アクセスコールバックは渡されるuser_view_access()であり、番号1ではなく、メニューパス(この場合は「user /%user」)から取得した値です。関数はによって返される値を取得するため、これは特定のケース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',
  );

前のメニューが次のように定義され、「user / hello」などのパスで呼び出されたとします。

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

この場合、アクセスコールバックは引数としてパスから取得した値を受け取ります(0は「ユーザー」を意味し、1は「ユーザー」とスラッシュの後の部分を意味します)。この場合、その値は「hello」です。

これらのワイルドカード引数をよりよく理解するには、ワイルドカードローダー引数を参照してください。ドキュメントページにはDrupal 6というタグが付いていますが、報告された内容はDrupal 7でも有効です。


素晴らしい説明。私の要件では、「今すぐ投票する」というカスタムボタンは認証されたユーザーのみが処理する必要がありますが、ボタンも匿名に表示され、匿名ユーザーがクリックするとログインページにリダイレクトされ、処理が続行されます。この特定のシナリオでは、ボタンを匿名に表示する特別なアクセス条件がありますか?この投稿をより完全なwikiにするため、ここでコメントします。ブックマーク済み.. :)
15

4

アクセスコールバックは、一部のユーザーが何らかの権限を持っているかどうかを調べる機能です。デフォルトのアクセスコールバックはuser_access()です

アクセス引数は、アクセスコールバックによって検査される許可をリストします。例:「コンテンツにアクセス」


他に何が価値があるのaccess callbackでしょうか?それが他のものであったなら、それはuser_access()必要性を取り除くでしょうaccess argumentsか?
user1359

2
あなたが望むものなら、なんでも。TRUEまたはFALSEを返す関数。
ベルディール

それで、あなたは必要ないでしょうaccess argumentsか?
-user1359

はい、あなたはそれをスキップすることができます
Shoaibナワズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.