アクセス引数とアクセスコールバックの違いは何ですか?
アクセスコールバックを_'user_access'
_に設定し、array('custom permission')
がアクセス引数の値であるとします。
どういう意味ですか?それらは互いにどのように影響しますか?
「アクセスコールバック」は、ユーザーがページにアクセスできることを確認するために呼び出される関数です。特別な場合として、値は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。
アクセスコールバックは、一部のユーザーが何らかの権限を持っているかどうかを調べる関数です。デフォルトのアクセスコールバックは ser_access() です。
アクセス引数には、アクセスコールバックによって検査される権限がリストされます。例えば「アクセス内容」