web-dev-qa-db-ja.com

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

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

アクセスコールバックを_'user_access'_に設定し、array('custom permission')がアクセス引数の値であるとします。

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

20
user1359

「アクセスコールバック」は、ユーザーがページにアクセスできることを確認するために呼び出される関数です。特別な場合として、値はTRUEであり、その場合、すべてのユーザーがそれにアクセスできます。つまり、アクセス許可がバイパスされます。

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

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

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

この場合、アクセスコールバックは ser_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。

28
kiamlaluno

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

アクセス引数には、アクセスコールバックによって検査される権限がリストされます。例えば「アクセス内容」

4
Shoaib Nawaz