ビューモジュール:ユーザーによるアクセスを制限する方法


8

Viewsモジュールを使用して、特定のユーザーのみがアクセスできるビューを作成しています。ビューにはロールまたは権限によるアクセス制御が含まれていることはわかっていますが、もっと細かいことが必要です。基本的に、ユーザー「x」とユーザー「y」だけが特定のビュー(または他のユーザー)にアクセスできると言えるようにしたいサイト管理者の役割)。したがって、これは、ACLモジュールが個々のノードに対してどのように機能するかと非常によく似た機能を果たします。

カスタムビューアクセスプラグインを作成する最善の方法はありますか?私はこれについてあまり経験がありません。

また、これを実現するためにいくつかの検証で引数を使用することについても疑問に思っています(そのため、何十もの個別のビューを作成する必要はありません)。たとえば、このビューは特定のノードパスのタブになるため、そのノードにビューを表示できるユーザーを指定するユーザー参照フィールドを設定することについて疑問に思っています。現在のユーザーがユーザー参照フィールドで指定されたユーザーと等しいかどうかのみを検証する方法が必要です。

何か案は?それとも、これを必要以上に複雑にしていますか?

ありがとう、ベン


ビューアクセスプラグインを作成する必要があるかもしれませんが、質問をもう少し詳しく更新できれば、別の方法で実現できるでしょう。ビューは何をしますか/表示しますか?閲覧を許可されているのはどのユーザーですか?ユーザーには異なる役割がありますか?ユーザーには、ユーザーがアクセスできるようにする特定のフィールドまたは何かが関連付けられているか
ジェイミー・ホラーン、

ジェイミー、返信ありがとうございます。実際、Drupal Commerceを使用して、ユニークな種類のオンラインストアを作成しています。各商品ノードのタブとして([表示]タブと[編集]タブに加えて)、[注文]という追加のタブを作成します。これは、その特定の商品を含むすべての注文を表示するビューになります。特定の製品のサプライヤーは、その製品の「注文」ビューを表示できるようにしたいユーザーです。
BenK、

このようにして、サプライヤは継続的に自社製品の販売を監視できます。しかし、サプライヤは他のサプライヤの製品の売上を確認できるため、「サプライヤ」の役割を持つ全員にアクセス権を付与したくありません。理にかなっていますか?;-) --Ben
BenK、

回答:


5

ビューのアクセス許可を制限する代わりに、そのビューにつながるメニュー項目(ノードのタブまたはメニューコールバック)のアクセス許可を制限できます。「デフォルト」表示のみでページ表示なしでビューを作成することができます(そのため、ユーザーはパスへのパスを理解することができません)。次にpage callback、メニュー項目のを呼び出しviews_embed_viewて、ビューを表示します。メニューアイテムのアクセス許可の処理は、ビュー用の新しいプラグインを作成するよりも簡単なようです(プラグインは他の人にとって役立つ場合があります)。


提案をありがとう!私は結局この一般的なアプローチ(これもBerdirによって提案された)に従いましたが、field_usercanaccessと呼ばれる各ノードにユーザー参照フィールドを作成しました。hook_menu()を使用して、現在のユーザーがフィールドで参照されているユーザーと一致することを確認するアクセスコールバックを定義することができました。そうしないと、タブ(およびビュー)は表示されません。これは素晴らしいです!:-)
BenK

@BenKすごい!何かうまくいきました。Drupal Answersを優れたリソースにする手助けの一環として、役立つと思われる回答(または質問)にも投票する必要があります。したがって、おそらくあなたは@Berdirの回答に投票する必要があります(そして私のものですが、これは投票を得ようとしているのではなく、Drupal Answersをより良いサイトにしようとしているのです)
Chaulky

ありがとう。:-)私はStack Exchangeを使い始めたばかりで、13ポイントしかありません。投票しようとすると、投票には15ポイントが必要だと表示されています。したがって、誰かが2点空けている場合(または他の方法で獲得できる場合)、私は間違いなく回答と質問に投票します。
ベンク

@BenKああ、15ポイントの制限を忘れてしまいました。あなたはいつでも質問に答えてみることができます...あなたの答えに1つの賛成票を投じると、10担当者が得られます。
Chaulky

6

ビューアクセスコールバックモジュールをお試しください。

ビューにコールバックベースのアクセス制御を提供します。

使用可能なコールバック関数はhook_views_access_callbacks()、(と同じようにhook_perm())関数を使用してモジュールによって定義され、ビューの「アクセス制限」構成で設定できます。


奇妙な致命的なエラーを除いて、ビューアクセスコールバックの使用はうまく機能します。ここを参照してください:drupal.stackexchange.com/questions/3336/…。それは行く方法のようです-しかし、それを修正する方法は?
Druvision 2014年

2

私は何かが欠けている必要がありますが、新しいロールを作成してこれらのユーザーを追加するように思えます。次に、ビューのアクセス:ロール機能を使用します。

コンテンツ内の何かにアクセス権を関連付ける必要がある場合は、カスタムのビューアクセスを使用します。これは、初めてセットアップするときに苦労しましたが、作業が終わったら柔軟性に感謝します。ビューがメニュー項目を生成している場合、ビューがアクセス関数を渡さないと表示されません。

メニュー項目のみを非表示にしている場合、ビューは引き続き実行され、ユーザーはURIを調整してデータを表示できるように思えます。

ジェリー


1

カスタム権限モジュールを使用して、特に目的に合わせていくつかの新しい権限を作成し、ユーザー権限モジュールを使用してそれらの新しい権限を個々のユーザーに割り当ててみませんか?

カスタム権限モジュールは非常に軽量です。ただし、基本的には各ユーザーの裏で新しい役割が作成されるため、ユーザーのアクセス許可モジュールについてはよくわかりません(これらの役割はメインのアクセス許可ページには表示されません)。多くのユーザーがいる場合、これはロールとuser_rolesテーブルのサイズを少し増やします。


これは、カスタムアクセス許可を使用する興味深い提案です。このモジュールは、サイト構成のアクセス許可よりも広くなったため、見たことがありませんでした。ここでの唯一の問題は、Drupal 7でこれをすべて実行していることです(まだ公式のブランチはありません)。しかし、それを機能させることができれば、ビューのアクセス制御で直接(ユーザー許可モジュールを必要とせずに)許可を指定できる可能性があります。提案をありがとう!:-)
BenK、

私はそれを試して報告します。
BenK、

0

そう、それはもっと理にかなっています。(おそらく100%確実ではないかもしれませんが)ビューと引数を使用できると思います。引数を、現在ログインしているユーザーから取得したユーザーIDに設定し、デフォルトの引数に何も表示しないようにします。それはそれを行うことができるはずですが、公平であるためにどれほど安全かはわかりません。試してみる場合は、投稿して進捗状況をお知らせください。


ええ、私は物事を試して報告します。引数付きのビューアクセスプラグインも試しているので、どのように動作するかを見ていきます。ありがとう。
BenK、

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