ANDではなくORを使用して複数のグループのユーザーを特定しますか?

カテゴリとサブカテゴリを使用して、ユーザーが「OR」ロジックに基づいて表示できるようにすることは簡単です。つまり、ユーザーがグループXまたはグループYに属している場合、カテゴリまたはサブカテゴリを表示できます。

ユーザーがカテゴリ/サブカテゴリを表示するためにグループXとグループYの両方に属している必要があるように、「AND」ロジックを効果的に使用することは可能ですか?

私たちのユースケースは、3つのアクセスレベルがあることです。これらは、1年生、2年生、3年生と考えるのが最も簡単です。1年生は1年生のコンテンツのみを表示でき、2年生は1年生と2年生のコンテンツを表示でき、3年生はすべてのコンテンツを表示できます。これはうまく機能します。

さらに、トラストレベル3のユーザーに特定のイベントやリソースへの早期アクセスを付与することで、別のレイヤーを追加したいと考えています。

最初に、さまざまな学年レベルでリストにないイベントを使用してこれを試しましたが、トラストレベル3のユーザーにそれらのイベントへのリンクを送信しました。しかし、1年生、2年生、または3年生を監視するように通知が設定されているユーザーも、トラストレベル3に限定されず、それらのイベントを即座に表示できます。

別の方法としては、「トラストレベル3の報酬」というカテゴリを作成し、1年生、2年生、3年生のサブカテゴリを持つことができますが、このように権限を制限することはできません。1年生、2年生、3年生はカテゴリ全体に表示する必要があるため、再び、それらのグループのすべてのユーザー(任意のトラストレベル)がサブカテゴリを見ることができます。

非常に不格好な方法は、トラストレベル3のユーザーをエクスポートし、次に(たとえば)2年生のユーザーをエクスポートし、Excelでそれらをマージして重複を見つけ、それらの重複を「トラストレベル3および2年生」のようなグループにインポートすることです。これは機能しますが、毎回かなりの手作業が必要になり、定期的に実行したいアクションです。

同じ結果を達成するための他の方法についてのアイデアはありますか?カスタムプラグインまたはスクリプトで、少なくともエクスポートおよびインポートプロセスを自動化できますか?

よろしくお願いします。

「いいね!」 2

ターゲットグループのユーザーのうち、トラストレベル3を持つユーザーを含む新しいグループを作成することが、これを達成する唯一の方法だと考えられます。Discourseには、カテゴリセキュリティ権限で使用できるANDルールがありません。同様の質問が、1つ以上のグループのメンバーを除外するカテゴリルールを作成することについて、数回ありました。

サイトでData Explorerプラグインが利用可能な場合は、トラストレベル3を持つターゲットグループの全ユーザーのリストを返すData Explorerクエリを使用できます。大量のユーザーを扱っていない場合は、クエリから返されたユーザー名のリストをグループの「ユーザーの追加」フォームに直接コピー/貼り付けできるはずです。Discourseは、既にグループに存在するユーザー名をそのフォームに追加できるようですので、クエリを定期的に実行すれば、返されたユーザー名をグループの「ユーザーの追加」フォームにコピーし続けることができるはずです。なお、フォームに貼り付けることができるユーザー名の最大数については、よくわかりません。80人のユーザーでテストしたところ、問題なく動作しました。また、ユーザー名のリストを完全に重複して貼り付けようとすると、Discourseはエラーを返すようです。ただし、そのエラーは無視できます。

以下は、私がテストしたクエリです。クエリを実行する前に、グループ名(例:「year_2」)を指定する必要があります。

--[params]
-- string :group_name

SELECT u.username
FROM group_users gu
JOIN groups g ON g.id = gu.group_id
JOIN users u ON u.id = gu.user_id
WHERE g.name = :group_name
AND u.trust_level = 3

Data ExplorerクエリをAPI経由で実行し、APIリクエストの結果を使用してグループを更新することで、上記のプロセスを自動化することが可能です。詳細はこちらをご覧ください:Discourse APIでData Explorerクエリを実行する。その後、API経由でグループメンバーを更新する必要があります。

Data Explorerクエリの結果に対して、直接いくつかの種類のアクションを実行できると興味深いでしょう。例えば、ユーザー名のリストを返すクエリで、コピー/貼り付けの手順を踏むことなく、すべてのユーザーをグループに追加するなどです。

「いいね!」 4

ありがとうございます!
Data Explorer を使ったことはありませんが、検討中のことリストに入っており、これは私がやろうとしていることを実現するためのもっともらしい方法に聞こえます。見てみます…
クエリもありがとうございます。

「いいね!」 2

こんにちは @CC_people さん、

お役に立つかわかりませんが、念のため共有します。

「いいね!」 3

もう1つの選択肢は、条件が満たされたときにユーザーを特別グループに追加するカスタムプラグインです。

「いいね!」 2

念のため、他の人の参考になるかもしれないので、ここで行ったことを報告します。要するに、Excelにエクスポートし、Excelで「AND」基準に適合するユーザーを特定させ、それからそれらのユーザーをグループに一括追加しています。

カスタムプラグインで同じことを行うように技術アシスタントに依頼しましたが、少しトリッキーなようですので、今のところExcelを使用しています。

詳細:

  1. 全ユーザーデータベースをエクスポートします。
  2. Excelにインポートします。ISNUMBERとSEARCHを使用して、最初のシートの特定のグループのユーザーを2番目のシートに抽出します。
  3. ISNUMBERとSEARCHを再度使用して、2番目の特定のグループのユーザーを3番目のシートに抽出します。
  4. それらのユーザーを適切なグループに一括追加します。

同じ結果を達成するためのよりクリーンな方法があると思いますが、それが実装されたので、エクスポートされたデータを毎回貼り付けてから結果をインポートするだけで、途中で考える必要はありません。

このシステムを使用して、tl3の「レギュラー」ユーザーに特別な権限や早期アクセスを提供しており、より高品質でより多くの使用を奨励するという望ましい効果が得られています。したがって、多少ぎこちなく自動化されていませんが、成功です。「このグループとあのグループ」の機能ができました。

新しい「バッジによるユーザーグループメンバーシップ」の自動化スクリプトを使用して、これを連携させることができるかもしれません。特に、カスタムトリガーバッジが有効になっている場合は、その可能性があります。

「いいね!」 1

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.