web-dev-qa-db-ja.com

役割(複数レベル)に基づいてコンテンツへのアクセスを制限し、パブリックプレビューを表示するにはどうすればよいですか?

次の状況で信頼できる解決策を探しています。

  1. ユーザーに複数のレベルのアクセス権を持つメンバーシップサイト(役割に基づく、匿名など、レベル1からレベル4)
  2. ノードごとにロールによるノードビューアクセスを制限する必要がありますが、ティーザーへの匿名アクセスを許可します(他のフィールドも表示/制限できるようにする必要があります)
  3. パフォーマンスと柔軟性を考慮に入れる

ほとんどの問題を解決するが、完全には解決しないモジュールがいくつかあります。使用するモジュールの組み合わせに関する推奨事項を探しています。これらのいずれかをカスタムコードで拡張する必要があるかどうか、またはcontribモジュールの組み合わせだけが可能かどうかを考えています。

  • プレミアムコンテンツ は基本的な機能を提供しますが、通常の本文フィールドでのみ機能するようです。他のフィールドを公開したり制限したりする場合でも、それは良いオプションですか? (たとえば、本文と別のテキストまたはファイルフィールドを制限します)。
  • 分類アクセス制御 :割り当てられた分類用語を変更するだけで、ノードごとのアクセスレベルを簡単に変更できるのが好きです。しかし、ティーザーまたは他のフィールドへの匿名アクセスをどのように許可しますか?
  • フィールド権限 は、必要なフィールドレベルのすべての細分性を提供しますが、1つのフィールド(ノード本体など)をノードごとに異なるロールに制限するオプションが必要です。
  • それとも、パネルで何かをしますか(cf. this answer )?

他のモジュール(ビューなど)でニースを再生するソリューションが推奨されます(TACはここで対象となると思います-たとえば、分類法でフィルターし、用語の変更にVBOを使用する可能性があります...)。

どうしますか?

更新:パネルの使用を調査しました。 Panelsベースのアプローチが提供する柔軟性が気に入っているのですが、私のユースケースではそれが実現可能かどうか疑問です。

パネルを使用する場合、選択ルールは、現在のユーザーの役割と表示されているノードの用語IDの組み合わせに基づく必要があるため、各選択ルールには2つの基準と「すべての基準に合格する」設定が必要です。したがって、各アクセスレベル(「匿名」を除く)には2つのバリアントが必要です。ティーザーを表示するためのtid +ロールの組み合わせ用と、完全なノードを取得するためのtid +ロール用です。

考慮すべき5つのロール(匿名+ロールA、B、C、D)があるため、9つのページバリアントが必要になります。これはかなりエレガントに感じられません、または9つのバリアントは受け入れられますか? (パフォーマンス、保守性などについて考える)。

別の問題は、選択ルールの用語ID基準がコンテンツタイプごとであることです。そのため、これを複数のコンテンツタイプに使用したい場合は、さらに多くのバリアントが必要になります。ロールと用語IDの組み合わせに対して「すべての基準に合格する」設定が必要なため、1つの選択ルールで2つのコンテンツタイプの用語IDを追加できません。

別のオプションは、選択ルールを評価するためにPHPを使用することですが、それはパネルを使用する目的に反しているように思われます。DBのコードは良い考えではありませんなど。

したがって、Panelsでより簡単な方法を見落とさない限り、それはそれほど良い考えではないようです(おそらく、カスタムPHPを除く)...)

1
arjan

Panels を使用します。

基本的に、すべてのPanelページには、2つのバリアントがあります。

各バリアントには、ユーザーロールに基づいた選択ルールがあり、1つはロール用、もう1つはロール用ではありません。

次に、それぞれに必要な方法でコンテンツを作成します。個人的には、制限されたビューに対して カスタムノードビュー を作成するので、Node Being Viewedコンテンツピースを使用して、作成した表示モードを使用するように設定するだけです。

Panelsをお勧めする理由は、特別な機能のモジュールを互いに連携させる必要なく、将来の変更を容易にするためです。

6
mpdonadio