justin
(Justin DiRose)
2019 年 7 月 19 日午後 12:57
1
私が運営しているフォーラムでこの問題が発生しました。再現手順は以下の通りです:
管理者として新しいグループを作成
表示設定を「グループオーナー」に設定
グループを作成
/g に戻る
グループが表示されない
コンソールで Group.find_by(name: <name>) を実行して確認すると、正しく返却されます。表示設定を「グループオーナーとスタッフ」に変更すると、正しく表示されます。
これは意図的な仕様でない限り、この表示レベルではモデレーターではなくとも管理者がグループを表示できると想定されます。
この挙動には、昨日 2.4.0.beta2 へのアップグレードを行うまで気づいていませんでした。
justin
(Justin DiRose)
2019 年 7 月 19 日午後 1:03
3
いいえ、JSON エンドポイントを呼び出しても、グループは管理者として表示されません。
pfaffman
(Jay Pfaffman)
2019 年 7 月 19 日午後 1:51
6
そうね。あなたが見過ごすようなことではなかったと思うけど、それが私には唯一の手段だったの。
pmusaraj
(Penar Musaraj)
2019 年 7 月 19 日午後 3:48
7
@justin さん、この問題は再現できません。ローカル環境と DO ホスティングインスタンスの両方で試しましたが、2 つの異なる管理者アカウントからグループを作成しようとしました。いずれの場合も、管理者はすべてのグループを閲覧できています。
justin
(Justin DiRose)
2019 年 7 月 19 日午後 3:56
8
おかしいな。クリーンインストールで試してみないと。手持ちの本番インスタンスでは確実に再現できます。アップデートして、そこから進めましょう。
justin
(Justin DiRose)
2019 年 7 月 23 日午後 8:43
9
新規インストールで試しましたが、@pmusaraj 様と同じ結果になりました。おそらく、使用中のプラグインが原因ではないかと推測します。原因が判明次第、改めてご報告いたします。
プラグインも使っていますか?どのプラグインですか(Discourse が作成・配布していないものに焦点を当てて)…それとも、これは新しい回帰現象だと言っているのですか、@justin ?
こんにちは。グループの可視性を「グループオーナー」から「グループオーナー、メンバー」に変更したら、再び表示されるようになりました。「グループオーナー」に限定された場合のグループ設定に関するコードに何か不具合があるのでしょうか?
justin
(Justin DiRose)
2019 年 8 月 8 日午後 8:45
13
@outofthebox 偶然でも、Babble チャットプラグインがインストールされていましたか?そのプラグインをインスタンスから削除した後、それが原因で問題が再発したようです。そのプラグインをアンインストールして再構築したところ、グループの可視性が復元されました。
pmusaraj
(Penar Musaraj)
2019 年 8 月 8 日午後 8:59
14
@justin 素晴らしい発見ですね。Babble のソースコードを簡単に確認したところ、コアのグループに関する私の更新と競合しているようです。Babble は visibility_level: 4 に対してハードコードされたルールを追加しており、これが現在コア内の owners グループと競合しています。
class ::Group
@@visible_group_scope = method(:visible_groups).clone
scope :visible_groups, ->(user, order = nil, opts = {}) {
@@visible_group_scope.call(user, order, opts).where.not(visibility_level: 4)
}
end
@gdpelican さんがお時間のある時に確認していただけると幸いです。
Dev_Work
(Aleksandr)
2019 年 8 月 14 日午前 6:44
15
現在の Discourse のバージョンでこれを修正するにはどうすればよいですか?
このコードを削除すべきでしょうか? .where.not(visibility_level: 4)
@@visible_group_scope = method(:visible_groups).clone
scope :visible_groups, ->(user, order = nil, opts = {}) {
@@visible_group_scope.call(user, order, opts)
}
end
RGJ
(Richard - Communiteq)
2019 年 8 月 15 日午後 7:19
16
はい、この問題についてもう少し深く調査しました。
どうやら、Babble が独自に visibility_level を割り当てて使用しており、次の未使用の定数(4)を採用していたようです。
数週間前、Discourse コアコードも新しい visibility_level を追加し、同様に次の未使用の定数(これも 4)を採用してしまいました。これにより、この定数の重複使用が発生しました。
したがって、修正は以下の 2 段階で構成されます。
Babble が使用する visibility_level を変更します。これは簡単です。将来的な競合を避けるために、各プラグインが独自の BASE_VISIBILITY_LEVEL を登録するようにすれば完璧ですが、現時点では単に別の値(例えば 1001)を選ぶだけでも構いません。
visibility_level が 4 のグループを新しい定数に変更しますが、これは Babble によって使用されていたグループに限定します。
このクエリで正しいグループが選択されますか、@gdpelican さん?
UPDATE groups
SET visibility_level = 1001
WHERE id IN (
SELECT g.id
FROM topics t
LEFT JOIN topic_allowed_groups tag ON tag.topic_id = t.id
LEFT JOIN groups g ON g.id = tag.group_id
WHERE t.archetype='chat');
gdpelican
(James Kiesel)
2019 年 8 月 16 日午前 10:43
17
こんにちは、すみません。数日中に確認いたしますが、修正の一般的な概要は完璧です。バックポートが難しい部分になりますので、近々詳しく確認します。
gdpelican
(James Kiesel)
2019 年 8 月 19 日午前 1:20
18
さて、この問題の修正をプッシュしました。他に不審な点がございましたら、お知らせください。
RGJ
(Richard - Communiteq)
2019 年 8 月 20 日午前 7:28
19
1 つの問題が見つかりました:Backfiller 機能にはマルチサイトサポートが不足しているようです(利用可能な接続をループする必要があります)
gdpelican
(James Kiesel)
2019 年 8 月 22 日午後 1:43
20
@RGJ それについてプルリクエストを作成していただけますか?私はマージできますが、今後数日は接続が限られる予定です。