匿名ユーザーからのリンクを隠す


7

メニュー全体を非表示にせずに、匿名ユーザーからメインメニューの特定のリンクを非表示にするにはどうすればよいですか?


そのページが匿名ユーザーに表示されない場合、リンクは自動的に削除されます。
j2r 2012年

また、ページを表示するユーザーを構成するにはどうすればよいですか?
ウォーカー

1
これはどのバージョンのDrupalに対応していますか?
Cravecode

正確には、Drupal 7バージョン7.14を使用しています。
ウォーカー

回答:


5

リンクの可視性を直接構成することはそれほど多くありませんが、特定のコンテンツタイプの権限を構成します。特定のタイプのコンテンツへのリンクは、リンクが指すコンテンツの権限に応じて、表示または非表示になります。 。

[管理]の[権限]セクションに移動し、権限を制限するコンテンツタイプを検索して、特定のコンテンツの権限を構成し、それらの権限(表示、作成、編集などのチェックボックス)を構成できます。適切な役割について。

特定のノード/コンテンツへのアクセスを構成する必要がある場合は、コンテンツアクセスをご覧ください


それが問題の本質です。いくつかのページを匿名ユーザーに表示する必要があるため、コンテンツタイプで単純にブロックすることはできません。ログインしているユーザーへの特定のリンクのみを表示するようにメニューブロックを構成する方法はありませんか?
ウォーカー

あなたを助けることができるはずのモジュールへのリンクで私の答えを更新しました。
レスターピーボディ

@レスターこれはノードレベルでのアクセス制御を許可するとは思わない、私は間違っている可能性がありますが、アクセス制御を必要とするノードに対して特定のコンテンツタイプを作成する必要があるようです。しかし、これは既にDrupalに組み込まれているので、このモジュールの機能について少し混乱していますか?私はこれを試さなければならないでしょう。仲間を共有してくれてありがとう。
stefgosselin 2012年

プロジェクトのサムネイルをクリックすると、チェックできる「コンテンツノードごとのアクセス設定」項目があります。「表示」の隣に別のタブが追加されているようです。たとえば、「アクセス許可」など、そのノードだけにアクセス許可を設定できます。しかし、そうです、実際に確認する前に、自分でも試してみる必要があります。
レスターピーボディ

具合が悪いので、これを私の小さなトリックバッグに入れておく必要があります。
レスターピーボディ

5

少量のエルボーグリースでこれを簡単に行うことができます

メニューがモジュールによって生成されるか、Drupal自体によって生成されるかに応じて、これには2つのフックがあります。でカスタムモジュールあなたはどちらか使用しhook_menuまたはhook_menu_alterを

これらの2つのフックにはパラメーターがaccess callbackあり、BOOLを返す関数を指定できます。関数がTRUEを返す場合、アクセスが許可され、メニューリンクが表示されます。FALSEが返された場合、アクセスは許可されず、メニューリンクは表示されません。

//Small example
function <your_module>_menu_alter(&$items) {
  // Example - disallow access for anonymous to node 15 from custom module
  $items['node/15']['access callback'] = '_accessCheck';
}

次に、コールバックを定義します。

function _acccessCheck(){
  global $user;
  if ($user->uid) { // user is logged in
    return TRUE;
  } // Anonymous
    return FALSE;
}

これが幸せなコーディングに役立つことを願っています!


3

ロールモジュールごとのメニューを使用して、ユーザーにメニューリンクの一部を表示することを制限できます。
ユーザーの役割に基づいてメニュー項目へのアクセスを制限できます。したがって、特定のメニューリンクを特定のロールから非表示にして、他の人に表示することができます。


メニューリンクを非表示にしますか、それとも、リンク先のページへのアクセスを制限しますか?
レスターピーボディ

@LesterPeabodyメニューリンクを非表示にします。また、メニューリンクを非表示にすることは、ユーザーがそのページにアクセスできるようにすることと同じです。ユーザーがページにアクセスするためのURLを推測するだけかどうかは
わかり

私はセキュリティの観点からそれに関して深刻な問題を抱えています。リンク先のページにアクセスできる場合にリンクを非表示にするだけのメリットは理解できませんが、意味がありません。
レスターピーボディ

1
アクセスを制限せずにメニュー項目を非表示にすることには正当な使用例がありますが、制限されたコンテンツが必要な場合は非表示にすることは制限に代わるものではありません。それは良くないね。これは、ユーザーがURLを推測するだけでなく(これは簡単に行うことができます)、制限されていない場合は、検索エンジンがページのインデックスを作成することにもなります。コンテンツが機密である場合、これは非常に重要です。-とはいえ、質問ではコンテンツへのアクセスが制限されているとは述べられていません。
rooby 2013

2

手動で行うことができます。多分、それは最良の形式ではありませんが、一時的に問題を解決するかもしれません。
JavaScriptファイルをmainに追加できます.tpl.php。このファイルでは、JavaScriptメソッドを使用して、コードの親要素と子要素(http://api.jquery.com/parent)を操作できます。したがって、最初に、次のような方法で要素を取得し#idelement(メニューのすべてのリーフの間のメニューコードに配置される場合があります)、次にによって要素を非表示にする必要があり.hide()ます。また、.tpl.phpユーザーがログインしている場合にのみ、JavaScriptファイルに追加したコードをコードに追加する必要があります。

if(user_is_logged_in()){
   drupal_add_js(yourjSFile);
}    

これは一時的な解決策です。
メニューでコードまたは要素を変更した場合は、このソリューションも変更する必要があります。
これにより、メニュー項目のみが非表示になり、コンテンツタイプは非表示になります。


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