web-dev-qa-db-ja.com

匿名ユーザーに特定のノードのみへのアクセスを許可するにはどうすればよいですか?

私は以下を実装しようとしています:匿名ユーザーはすべてのノードを表示することはできず、特定のノードのみを表示することができます。

私はこれを実現するためにtac lite( https://www.drupal.org/project/tac_lite )を使用しています。

ただし、ノードを表示する権限を現在制御できる唯一の方法は次のとおりです。

匿名ユーザーに「公開されたコンテンツの表示」の役割を与えず、tac_liteまたは他のコンテンツアクセスモジュールを構成して、特定のページへの匿名ユーザーへのアクセスを許可する=>機能しません。ユーザーがアクセスする必要があるノードをテストすると、アクセスが拒否されます

匿名ユーザーに「公開されたコンテンツの表示」ロールを与える=>機能しなくなり、匿名ユーザーは他のコンテンツアクセスモジュールの設定に関係なく、すべてのノードを表示できるようになりました

問題はtac_liteとは関係ありません。また、たとえばノードビューの権限-module https://www.drupal.org/project/node_view_permissions でも発生します。

また、問題を解決しようとしたときに、このページが私の目を引きました: https://www.drupal.org/node/2700 これは、「コンテンツにアクセスする」/「ビューを公開しているユーザーのみが公開する」と言います「ノードの管理」/「ノードアクセスのバイパス」ではなく「コンテンツ」は、ノードアクセスモジュール制御のワイルドワールドの対象となります。

Drupalを使用したアクセス制御は付加的なものであることを理解しました。したがって、匿名ユーザーに「公開されたコンテンツを表示する」権限を与えるべきではありません。それでも https:// www.drupal.org/node/2700 はこのアプローチと矛盾しているようです。

これは、develノードアクセスが次の場合に表示するものです。

  • 匿名ユーザーの「公開コンテンツの表示」権限をオフに設定しました
  • そのページを匿名ユーザーに表示するようにtac liteを設定しました
  • 匿名ユーザーとしてページにアクセスします

devel node access debug info

2
jjei

Group モジュールを使用して、サイト上のコンテンツとユーザーの任意のコレクションを作成し、それらのコレクションにアクセス制御権限を付与することができます。

Group モジュールで使用されるさまざまなタイプのロールの詳細については、「 Groupモジュールでサポートされるさまざまなロールは何ですか? 」に対する私の回答を参照してください。これらの役割を念頭に置いて、次のようにグループコンテンツへのアクセスを構成できます。

  • メンバーおよび部外者はすべてのノードにアクセスできます。
  • 匿名ユーザーは、どのノードにもアクセスできません。

この構成では、グループに属するすべてのノードで Group モジュールが匿名ユーザーのアクセスをブロックします(もちろん)。ただし、匿名ユーザーがアクセスできるようにする(特定のノード)(質問のような)の場合は、これらのノードをグループに割り当てないでください( Group アクセスルールが許可しないように)まったく適用されません)。

リソース:

1
Pierre.Vriens

これには Rules モジュールを使用できます。

以下に、ルールのプロトタイプ(ルールエクスポート形式)を示します。

{ "rules_limit_access_to_some_urls" : {
    "LABEL" : "Limit access to some URLs",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules" ],
    "ON" : { "init" : [] },
    "IF" : [
      { "user_has_role" : {
          "account" : [ "site:current-user" ],
          "roles" : { "value" : { "1" : "1" } }
        }
      },
      { "OR" : [
          { "data_is" : {
              "data" : [ "site:current-page:path" ],
              "op" : "IN",
              "value" : { "value" : [
                  "some\/path1",
                  "some\/path2"
                ]
              }
            }
          },
          { "text_matches" : {
              "text" : [ "site:current-page:url" ],
              "match" : "node\/\\d+\/something",
              "operation" : "regex"
            }
          }
        ]
      }
    ],
    "DO" : [
      { "redirect" : { "url" : "no_access" } },
      { "drupal_message" : {
          "message" : "Access to the content located at \u0022\u003Cstrong\u003E[site:current-page:path]\u003C\/strong\u003E\u0022 is not allowed for Anonymous users.",
          "type" : "warning"
        }
      }
    ]
  }
}

自分のニーズに合わせてその中のパスを調整し、匿名ユーザーがする必要があるすべてのパスを反映しますnotアクセスできる。有効にしたアクセスモジュールの場合は、匿名ユーザーにもアクセスを許可します(ルール条件に適合するパスは上記のルールによってブロックされますが、適合しないパスには匿名ユーザーがアクセスできます)。明らかに、「否定」機能またはルールを使用して、匿名ユーザーに許可されたパスのみを指定するように、このプロトタイプルールを作り直すこともできます。

1
Pierre.Vriens