FIX: unable to create new categories
Previous attempt at 70adb940
missed the critical "everyone" group from
staff, leading to a case where staff was no longer able to create categories
This commit is contained in:
parent
0472bd4adc
commit
f8b70f4ca3
|
@ -88,8 +88,12 @@ class Group < ActiveRecord::Base
|
||||||
validates :mentionable_level, inclusion: { in: ALIAS_LEVELS.values }
|
validates :mentionable_level, inclusion: { in: ALIAS_LEVELS.values }
|
||||||
validates :messageable_level, inclusion: { in: ALIAS_LEVELS.values }
|
validates :messageable_level, inclusion: { in: ALIAS_LEVELS.values }
|
||||||
|
|
||||||
scope :visible_groups, Proc.new { |user, order|
|
scope :visible_groups, Proc.new { |user, order, opts|
|
||||||
groups = Group.order(order || "name ASC").where("groups.id > 0")
|
groups = Group.order(order || "name ASC")
|
||||||
|
|
||||||
|
if !opts || !opts[:include_everyone]
|
||||||
|
groups = groups.where("groups.id > 0")
|
||||||
|
end
|
||||||
|
|
||||||
unless user&.admin
|
unless user&.admin
|
||||||
sql = <<~SQL
|
sql = <<~SQL
|
||||||
|
|
|
@ -72,9 +72,7 @@ class Site
|
||||||
end
|
end
|
||||||
|
|
||||||
def groups
|
def groups
|
||||||
groups = Group.visible_groups(@guardian.user)
|
Group.visible_groups(@guardian.user, "name ASC", include_everyone: true)
|
||||||
groups = groups.where("automatic IS FALSE OR groups.id = #{Group::AUTO_GROUPS[:moderators]}") if !@guardian.is_staff?
|
|
||||||
groups
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def suppressed_from_latest_category_ids
|
def suppressed_from_latest_category_ids
|
||||||
|
|
|
@ -25,4 +25,12 @@ class ApplicationSerializer < ActiveModel::Serializer
|
||||||
def cache_fragment(name)
|
def cache_fragment(name)
|
||||||
ApplicationSerializer.fragment_cache[name] ||= yield
|
ApplicationSerializer.fragment_cache[name] ||= yield
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def cache_anon_fragment(name, &blk)
|
||||||
|
if scope.anonymous?
|
||||||
|
cache_fragment(name, &blk)
|
||||||
|
else
|
||||||
|
blk.call
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -50,7 +50,9 @@ class SiteSerializer < ApplicationSerializer
|
||||||
end
|
end
|
||||||
|
|
||||||
def groups
|
def groups
|
||||||
object.groups.pluck(:id, :name).map { |id, name| { id: id, name: name } }.as_json
|
cache_anon_fragment("group_names") do
|
||||||
|
object.groups.order(:name).pluck(:id, :name).map { |id, name| { id: id, name: name } }.as_json
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def post_action_types
|
def post_action_types
|
||||||
|
|
|
@ -70,15 +70,15 @@ describe Site do
|
||||||
user = Fabricate(:user)
|
user = Fabricate(:user)
|
||||||
site = Site.new(Guardian.new(user))
|
site = Site.new(Guardian.new(user))
|
||||||
|
|
||||||
group = Fabricate(:group, visibility_level: Group.visibility_levels[:staff])
|
staff_group = Fabricate(:group, visibility_level: Group.visibility_levels[:staff])
|
||||||
expect(site.groups.pluck(:name)).to contain_exactly("moderators")
|
expect(site.groups.pluck(:name)).not_to include(staff_group.name)
|
||||||
|
|
||||||
group = Fabricate(:group)
|
public_group = Fabricate(:group)
|
||||||
expect(site.groups.pluck(:name)).to contain_exactly("moderators", group.name)
|
expect(site.groups.pluck(:name)).to include(public_group.name)
|
||||||
|
|
||||||
admin = Fabricate(:admin)
|
admin = Fabricate(:admin)
|
||||||
site = Site.new(Guardian.new(admin))
|
site = Site.new(Guardian.new(admin))
|
||||||
expect(site.groups.pluck(:name)).to match_array(Group.visible_groups(admin).pluck(:name))
|
expect(site.groups.pluck(:name)).to include(staff_group.name, public_group.name, "everyone")
|
||||||
end
|
end
|
||||||
|
|
||||||
it "includes all enabled authentication providers" do
|
it "includes all enabled authentication providers" do
|
||||||
|
|
Loading…
Reference in New Issue