グループ内の非公開イベント

現在、イベントエントリは常にカテゴリに追加できるカレンダーUI要素の一部です。特定のユーザーグループにイベントを制限する方法はありません。マルチコミュニティ構成のDiscourse環境では、すべてのコミュニティが他のすべてのコミュニティのイベントを確認できます。DiscourseのイベントをAPI呼び出し(例:

https://example.discourse.org/discourse-post-event/events.ics?user_api_key=[xxxxx]

)を通じて外部のウェブサイトに表示した場合、すべてのイベントが表示されます。

ユーザーグループ内でのみ表示される「内部」イベントを作成できるオプションが必要です。これらのイベントは、「一般」のICS APIリクエストでは読み取れないようにすべきです。代わりに、特別な追加の「グループAPIキー」またはその他の何らかの安全な制限手段によってのみ利用可能にする必要があります。ユースケースとしては、「公開」イベントと、特別なユーザーグループ内でのみ表示・編集可能な「非公開」イベントの選択が挙げられます。

「いいね!」 1

必要なグループにのみ所属するユーザーを作成し、そのユーザーの設定からカレンダーのサブスクリプションURLを生成するという方法は、あなたのケースで機能しますか?フィードには、そのユーザーが見えるイベントのみが含まれるようになります。

「いいね!」 1

うーん、ちょっと自信がありません。ワークアラウンドには聞こえますが、本当に「解決策」とは言いにくいかもしれません :smiling_face_with_sunglasses:

コミュニティ固有のグループ内の全員がイベントを作成でき、かつ「自分の」コミュニティのカテゴリに入るとそれらを確認できるようにする必要があります。これは、現在5つの異なるコミュニティで運用しているセットアップではすでにうまく機能しています。以下のカテゴリ権限を使用しています:

  1. コミュニティグループごとに1つのカテゴリ。このカテゴリには「グローバル読み取り専用」と「コミュニティ読み取り/作成/返信」が設定されています。このカテゴリはAP経由でフェデレーションされており、Discourseアカウントを持たない人々がイベントを確認できるようにし、またDiscourseカレンダーをサードパーティシステム(例:ICSプラグイン付きのWordPress)に統合できるようにしています。
  2. 複数の内部サブカテゴリ。これらのサブカテゴリには「コミュニティ読み取り/作成/返信」の権限のみが設定されています。適切なグループ権限がない限り、表示されません。

唯一のギャップは以下の2点です。

  1. 現在のICSリクエストでは、すべてのイベントが提示されてしまうこと
  2. ICS/APIを通じて特定のコミュニティのイベントのみをリクエストする方法がないこと。

すべてのイベント、それとも使用されているAPIキーのユーザーがアクセスできるすべてのイベントですか?

特定のリクエストにどのイベントを含めるべきかを選択するプロセスをどのように想像していますか?

良い指摘ですね。

APIキーには2つのユーザーレベルがあります:「シングルユーザー」と「全ユーザー」。現在ICSリクエストで使用しているAPIキーは「全ユーザー」レベルです。

したがって、これを解決するにはおそらく「シングルユーザー」レベルのAPIキーが必要になります。また、選択されたユーザーにはコミュニティの権限グループのみを付与し、それ以外の権限は与えないようにする必要があります。

確認してみます。これで問題が解決するかもしれません……

「いいね!」 1

いくつかのテスト結果です:

  • ユーザーレベル「単一ユーザー」でAPIキーを作成しました
  • まずスコープ設定の「granular」を確認しましたが、「events」エンドポイントに関する制限を見つけることができませんでした。Discourse API Docs では「events」がクエリグループとしてリストアップされていますが、制限は見つかりませんでした
  • 代わりに「read only」を使用しました。結果は「You are not authorised to view the requested resource.」でした

curl -kv https://xxx/discourse-post-event/events.ics?user_api_key=xxx` を実行すると、「単一ユーザー」のAPIキーを使用するとicsファイルが返されません。一方、ユーザーレベル「全ユーザー」ではイベントの完全なリストが返されます。特定のユーザーグループのイベントを「フィルタリング」する方法が見当たりません。

また、https:[xxxx]/admin/plugins/discourse-events/settings も確認しましたが、API関連の設定に誤りはないか調べたところ、該当する項目はありませんでした

何かコメントはありますか?