一部のノードの所有者であるユーザーがいて、各ノードのメインメニューにメニューリンクがあります。ユーザーは自分が所有するノードのみを表示でき、他のユーザーのノードは表示できません。
ここでの問題は、すべてのユーザーに対して、次の画像のようにメニューが表示されることです。現在のユーザーが所有するノードと現在のユーザーが所有していないノードの両方のリンクが表示されます。
ログインしたユーザーが所有するノードに対応するメニュー項目のみを表示したい。これどうやってするの?
Drupalは、ユーザーがアクセスできないパスのメニュー項目を非表示にします。ただし、これが機能するには、そのメニュー項目のアクセスコールバックがFALSE
を返す必要があります。代わりにメニューコールバックでアクセス制御を処理する場合、Drupalはユーザーがアクセス権を持っていないことを知らず、メニューを表示します。
解決策は、ノードに既存のものを使用できない場合にカスタムアクセスコントロールモジュール/関数を実装することです。
アクセスを制御するメニューエントリごとに、 hook_men (http://api.drupal.org/api/drupal/modules--system--system.api.php/ function/hook_menu/7)配列値のセットアップ?これらの配列エントリごとに必要なプロパティは、「アクセスコールバック」です。ユーザーがこのメニューアイテムへのアクセス権を持っている場合はTRUEを返し、そうでない場合はFALSEを返す関数です。
ターゲットで ser_access($ string、$ account = NULL) (http://api.drupal.org/api/drupal/modules--user--user.module/function/user_access)を使用しますこの参照に基づいて選択したアクセス許可の値:( http://drupal.org/node/132202 )
(この機能を実行するためのモジュールを提供する)以下の回答が見つかります...
ユーザーロールに基づいて1つのメニュー項目のみを表示/非表示にするにはどうすればよいですか?
...有用:
Drupal menu_per_roleモジュール:
https://drupal.stackexchange.com/a/29545
Drupalメニュー項目の可視性。