FEATURE: Support designating multiple groups as mods on category (#28655)

Currently, categories support designating only 1 group as a moderation group on the category. This commit removes the one group limitation and makes it possible to designate multiple groups as mods on a category.

Internal topic: t/124648.
This commit is contained in:
Osama Sayegh
2024-09-04 04:38:46 +03:00
committed by GitHub
parent 7092d88ee4
commit 280adda09c
49 changed files with 388 additions and 273 deletions

View File

@@ -136,17 +136,14 @@ class Guardian
return false if !category
return false if !category_group_moderation_allowed?
reviewable_by_group_id = category.reviewable_by_group_id
return false if reviewable_by_group_id.blank?
@group_moderator_categories ||= {}
@category_group_moderator_groups ||= {}
if @category_group_moderator_groups.key?(reviewable_by_group_id)
@category_group_moderator_groups[reviewable_by_group_id]
if @group_moderator_categories.key?(category.id)
@group_moderator_categories[category.id]
else
@category_group_moderator_groups[
reviewable_by_group_id
] = category_group_moderator_scope.exists?("categories.id": category.id)
@group_moderator_categories[category.id] = category_group_moderator_scope.exists?(
id: category.id,
)
end
end
@@ -692,8 +689,9 @@ class Guardian
end
def category_group_moderator_scope
Category.joins(
"INNER JOIN group_users ON group_users.group_id = categories.reviewable_by_group_id",
).where("group_users.user_id = ?", user.id)
Category
.joins(:category_moderation_groups)
.joins("INNER JOIN group_users ON group_users.group_id = category_moderation_groups.group_id")
.where("group_users.user_id": user.id)
end
end