web-dev-qa-db-ja.com

ユーザー(ユーザーリスト)に基づいてフォーラムアクセスを制限する

選択したユーザーだけが個々のフォーラムにアクセスできるように、フォーラムへのアクセスを制限する必要があります。 (ユーザーはフォーラムに申し込み、モデレーターはそのフォーラムへの参加を許可するかどうかを決定する必要があります。)

ユーザーが初めてフォーラムリストページにアクセスした場合、リストされたすべてのフォーラムのみが表示され、トピックは表示されません。

私は Flag モジュールを使用してサブスクリプションシステムを実装しました。

フラグを設定しました'subscribe_forum'これにより、ユーザーはフォーラムにフラグを立てることができ、別のフラグ'approve_forum_subscription'これにより、管理者はフラグを立てることができます。つまり、ユーザーのサブスクリプションが受け入れられます。

私がしたいのは、そのユーザーに、彼が購読し、管理者によって承認されたフォーラムへのアクセスのみを許可することです。

提案するソリューションは、このフラグシステムを使用する必要はありません。私は他の提案を受け入れます。

Forum Access モジュールをインストールしましたが、役割に基づいてアクセスを制限できますが、個々のフォーラムのユーザーのリストが必要です。このモジュールで私の場合に役立つ唯一のことは、個々のフォーラムのモデレーターを設定する機能です。

編集:コアフォーラムの機能を拡張するために Advanced Forum モジュールも使用しています。

更新:

私は、高度なフォーラムによって既に提供されているPanelページを使用して、いくつかのカスタム選択ルールを追加することで、ほぼ目標を達成しました。

PHPコードルールを追加しました。これは、ユーザーがフォーラムにフラグを付け、モデレーターがそれを受け入れた(つまり、ユーザーのフラグを付けた)場合にTRUEを返し、それ以外の場合はFALSEを返します。また、FALSEを追加しました。パネルペインに「アクセス拒否」メッセージのみを表示するフォールバックバリアント。

トピックリストパネルにも同じことを行いました。

次に、node/node%をオーバーライドするパネルページを有効にし、2つの選択ルールを追加しました。1つはコンテンツタイプがフォーラムで、もう1つはカスタムPHPかどうかを確認するためのものです。

だから、私はほとんど自分が欲しかったものを持っていますが、私が従うこの方法が良い方法であるかどうかはまだ完全にはわかりません。正直なところ、エレガントではありません。

私はまだ他の提案を受け入れています。また、まったく異なるアプローチになる場合もあります。

前もって感謝します。

4
Елин Й.

ビューまたはパネルを使用してフォーラムを表示する場合、非常に柔軟なアクセス制御を使用できます。 AFがすべてのビューを構築しているようには見えないので、パネルを使用するのが最も簡単な方法だと思います。

ページを作成し、ページ設定の下に、UI内で非常に詳細にできるアクセスルールがあります。ネイキッドレイアウトを使用して、ノード全体を表示およびレンダリングするコンテンツとしてフォーラムエンティティを含めることができます。

セカンドルック:Drupal Module Flexiaccess )を見てください。これは、必要なものとまったく同じであり、個人にアクセスできるユーザーを管理するための素晴らしいUIを備えていますカスタムのものを書いたり保守したりしないフォーラム:

Flexi Accessモジュールは、ACL(アクセス制御リスト)モジュールへのシンプルで柔軟なインターフェースを提供します。特定のノードへのアクセスが許可されている個々のユーザーに名前を付けるACLを設定および管理できます。

このモジュールでは、個々のノードへのアクセスを管理できます。管理者は、個々のユーザーにノードの表示(読み取り)、更新(編集/書き込み)、および削除の権利を付与できます。

Flexi Accessの主なアイデアは、オーガニックリストの複雑さ(または機能)を必要とせず、多数の(重複する)ロールを作成せずに、ノードごとに柔軟なユーザーアクセス制御を可能にすることです。

Flagを使用して「サブスクリプションリクエスト」を設定していることを確認しました。モデレーターは、フラグが設定されたユーザーをフラグで確認し、承認者がflexiaccessを使用してACLにemを追加しますか?

1
Tom

多分これはより信頼性が高く、試してみる価値があります:

  • すべてのフォーラムの購読ユーザーを含むビューでユーザーリストを作成します。このビューでは、フォーラムタイプのnidをコンテキストフィルターとして使用する必要があります。

  • Rules Bonus Pack および Conditional Rules モジュールをインストールして有効にします。

  • イベントでトリガーされるルールを作成します:「ページバリアントが読み込まれたとき」ここで、ページバリアント=フォーラムページ

  • そのルールで、上記のビューをロードするためのアクション「ビューを含むユーザーリストのロード」を設定します。

  • そのリストにループを追加する

  • このループ内で条件を追加してから、条件の追加:現​​在のユーザーのuidがそのリストにありません(データ/リストにアイテム/否定が含まれています)

  • 最後に(同じループ内で)ユーザーを別のページにリダイレクトするアクションを追加して続行し、必要に応じて、システムに別のアクションを追加して、「サブスクリプションはまだ管理者によって承認されていません」などのメッセージを送信します。何か。

私は答えが少し簡潔であることを理解しています。ルールの詳細やヘルプが必要な場合は、お知らせください。

1
Billy

調査をあまり行わずに、最も詳細な形式のアクセス許可(ユーザーごと)が必要なので、次のことを確認します。

https://drupal.org/project/user_permissions

2番目の方法(完全にはDrupalですが、機能します)または、この機能を実行するカスタムモジュールを作成します(ユーザーのリストと単純なフィールド1または0を取得し、フックノードの前処理(php)で、いくつかの単純なロジックを追加できます。値が1の場合にのみ特定の項目を表示します。また、これにはいくつかのCRUD操作が含まれます。

他の答えがあるかもしれません。

よろしく

0
Oleg Videnov