ノードへの直接アクセスを制限する方法は?


12

ノードへの直接アクセスを制限するが、特定のノードタイプの必須フィールドへのアクセスのみをビューに許可する方法は?

たとえば、Views Slideshowでは、特定のノードタイプに属する画像フィールドをスライドしています。ただし、検索エンジンがアクセスしたり、訪問者がそのノードタイプに属するノードにアクセスしたりすることは望ましくありません。

助言がありますか?

回答:


12

簡単な解決策は、アクセスしたくないノードを公開しないことです。ビューは、引き続きこれらのノードからデータをプルできます。


1
単純すぎます?「単純すぎる解決策」というものはありません。複雑さはそれ自体が目標ではありませんか?おそらくGoogletorpの答えはあなたの特定の問題を解決するものではありませんが、その場合は、もっと精巧になり、なぜそうでないのかを説明する必要があります。
marcvangend

@marcvangend遅くなりましたが、それが私の質問の答えではないことに気付きました。誰かがより良い答えを追加できることを願っています
ファハドウルレーマン

@Fahadより良い答えを得るには、より良い質問をする必要があります。Googletorpの答えは私にとって良い解決策のように見え、賛成票は同意するようです。問題が解決しない場合は、質問に進み、関連するすべての詳細を追加して質問を編集してください。
marcvangend

@marcvangendは実際に私の問題は解決されたので、あなたのコメントを踏まえて以前に答えを受け入れました。Googletorpsは非常に高い評価を得ており、彼の答えを受け入れても受け入れなくても違いはありません。彼は優れた代替ソリューションを提供してくれたので、私も彼に賛成票を投じました。
ファハドウルレーマン

@Fahadあなたが言っている答えを受け入れることで:この答えは私の問題を解決しました。これは強力な声明であり、訪問者が答えが有用かどうかを調べるのに非常に役立ちます。私の答えがあなたの問題を解決しなかった場合、質問を編集し、私の解決策があなたにとってうまくいかない理由についていくつかの詳細を投稿し、marcvangendが言ったように、詳細を追加する必要があります。
googletorp

3

user1によって追加されたノードを非公開にした場合、ユーザーがそのコンテンツタイプのコンテンツを編集する権限を持っている場合でも、他のユーザーは編集できません。

ノードページビューの制限は、特定のコンテンツタイプのノードへの直接アクセスを制限するより良い方法のようです。

使用方法も非常に簡単で、このモジュールを有効にして、通常どおり直接アクセスできるノードのアクセス許可を構成するだけです。

http://drupal.org/project/restrict_node_page_view

プロジェクトページから:

公開する必要があるスライドショーのノードタイプを使用したことがありますが、node / XXXパスを使用してノードが単独でアクセスできるようにしたくないですか?このモジュールはあなたのためです!

このモジュールを使用すると、ノードタイプと権限に基づいて、ノードページ(node / XXX)への直接アクセスを無効にできます。

モジュールを有効にし、許可を設定することを忘れないでください。


1

同じことをしますが、より多くの機能を備えた他のモジュール。

ウサギの巣穴

このプロジェクトのメンテナーは、「ノードページビューを制限する」メンテナーに課題のプロジェクトをマージするよう依頼します。

「ノードページビューの制限」に対する利点:

  • ノードのメイン機能と同じですが、ユーザー/ファイル/分類用語に拡張可能
  • モジュールで使用できます
  • コンテンツタイプまたはすべてのコンテンツに対してグローバルにすることができます
  • プロジェクトページで詳細を見る...

「ノードページビューの制限」に対するデメリット:

  • コードが増えると効果が低下する可能性があります(テストが必要、証明されていません)

1

を使用する必要がありますがnode_access()、を使用して簡単に実装できる特定のオプションがありますhook_node_access()。実装node_access()により、誰がノードにアクセスでき、誰がそのようなノードを作成、削除、編集、または更新できるかを決定できます。ただし、ビューはこれらのノードからデータをプルできます。

hook_node_access()node_access()


0

https://www.drupal.org/project/restrict_node_page_viewに触発されて、自分で小さなモジュールを書くことができます。

/**
 * Implements hook_node_access()
 */
function MYMODULE_node_access($node, $op, $account) {

  // Default checks
  if (!is_object($node)) {
    return NODE_ACCESS_IGNORE;
  }

  $type = is_string($node) ? $node : $node->type;

  if($op == 'view' && arg(0) == 'node' && arg(1) === $node->nid) {

    // Restrict access to full MYTYPE node for anon users
    if ($type == 'MYTYPE' && user_is_anonymous()) {
      return NODE_ACCESS_DENY;
    }
  }
  // Default
  return NODE_ACCESS_IGNORE;
}

このモジュールは数年前にすでに言及されました。あなたの答えが主題にもたらす新しいことを説明してもらえますか?
モウォ

@Mołot-...自分でモジュールを作成します。回答を編集しました。
-leymannx

0

Rulesモジュールを使用すると、次のようなルールを実装できます。

{ "rules_check_url" : {
    "LABEL" : "Disallow node/* access",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules" ],
    "ON" : { "init" : [] },
    "IF" : [
      { "text_matches" : {
          "text" : [ "site:current-page:url" ],
          "match" : "node\/\\d+$",
          "operation" : "regex"
        }
      }
    ],
    "DO" : [
      { "drupal_message" : {
          "message" : "Sorry, direct access to URLs like [site:current-page:url] is not allowed around here ...",
          "type" : "error"
        }
      },
      { "redirect" : { "url" : "no_access" } }
    ]
  }
}

上記のルールは、(まだ)選択したロールにのみ「アクション」を適用することを考慮していません(たとえば、管理者がこれらのパスを使用してノードを表示できるようにするため)。しかし、ルールモジュールに少し精通している人にとっては、それは追加する単純な「条件」です...

独自のサイトでこのルールを試すには、上記のルールコード全体をコピーし、「インポート」機能を使用して作成した独自のサイトの新しいルールに貼り付けます。次に、さらに編集/調整して、ご使用の環境に合うようにします(表示される「Sorry、...」メッセージなど)。

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