web-dev-qa-db-ja.com

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

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

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

助言がありますか?

12
Fahad Ur Rehman

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

Restrict Node Page Viewは、任意のノードへの直接アクセスを制限するより良い方法のようです特定のコンテンツタイプの。

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

http://drupal.org/project/restrict_node_page_view

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

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

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

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

3
Fahad Ur Rehman

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

12
googletorp

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

うさぎの穴

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

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

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

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

  • コードが多ければ多いほど効果が低くなる可能性があります(テストが必要ですが、証明されていません)
1
Payou

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

hook_node_access()node_access()

1
gauravjeet

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" } }
    ]
  }
}

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

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

0
Pierre.Vriens

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;
}
0
leymannx