TRUE
それが実際に使用しているコードである場合、現在ログインしているユーザーがメニューにアクセスできるときと、ユーザーがメニューにアクセスできないときに戻る必要があるため、アクセス コールバック関数は間違ってFALSE
います。使いませんdie()
。
これはhook_menu()のドキュメントで報告されているものです:
「アクセス コールバック」:TRUE
ユーザーがこのメニュー項目へのアクセス権を持っているかどうかを返す関数FALSE
。関数の代わりにブール定数にすることもできますし、数値を使用することもできます (ブール値にキャストされます)。親メニュー項目から値が継承されない限り、デフォルトはuser_access()です。MENU_DEFAULT_LOCAL_TASKアイテムのみがアクセス コールバックを継承できます。デフォルトのコールバックを使用するにはuser_access()
、「アクセス引数」としてチェックするパーミッションを指定する必要があります。
使用しているコードが表示されていない場合は、次の説明で表示されている動作を説明できます。
最初のユーザー (ユーザー #1) は、user_access()が常にTRUE
そのユーザーに対して返されるため、特定のユーザーです。これは、ユーザー ID が 1 に等しいことを明示的にチェックするその関数のコードで明らかです。
// User #1 has all privileges:
if ($account->uid == 1) {
return TRUE;
}
認証されたユーザーに対してアクセス コールバックが返さFALSE
れ、それが を使用してuser_access()
いる場合は、認証されたユーザーが関数に渡されたアクセス許可を持っていないことが原因です。
複数のパーミッションをチェックしていてuser_access('first permission') && user_access('second permission')
、代わりに ,を使用している可能性もありますuser_access('first permission') || user_access('second permission')
(またはその逆)。どのモジュールからも定義されていない権限の文字列を関数に渡しても、user_access('first permission') && user_access('second permission')
and user_access('first permission') || user_access('second permission')
is alwaysの結果として、何の違いも生じないユーザー #1 の場合。TRUE