mirror of
https://github.com/discourse/discourse.git
synced 2025-05-22 07:53:49 +08:00
FEATURE: add support for group members visibility level (#8004)
There are 5 visibility levels (similar to group visibility) public (default) logged-in users members only staff owners Admins & group owners always have visibility to group members.
This commit is contained in:
@ -716,6 +716,71 @@ describe Group do
|
||||
|
||||
end
|
||||
|
||||
describe ".members_visible_groups" do
|
||||
|
||||
def can_view?(user, group)
|
||||
Group.members_visible_groups(user).exists?(id: group.id)
|
||||
end
|
||||
|
||||
it 'correctly restricts group members visibility' do
|
||||
group = Fabricate.build(:group, members_visibility_level: Group.visibility_levels[:owners])
|
||||
logged_on_user = Fabricate(:user)
|
||||
member = Fabricate(:user)
|
||||
group.add(member)
|
||||
group.save!
|
||||
|
||||
owner = Fabricate(:user)
|
||||
group.add_owner(owner)
|
||||
|
||||
moderator = Fabricate(:user, moderator: true)
|
||||
admin = Fabricate(:user, admin: true)
|
||||
|
||||
expect(can_view?(admin, group)).to eq(true)
|
||||
expect(can_view?(owner, group)).to eq(true)
|
||||
expect(can_view?(moderator, group)).to eq(false)
|
||||
expect(can_view?(member, group)).to eq(false)
|
||||
expect(can_view?(logged_on_user, group)).to eq(false)
|
||||
expect(can_view?(nil, group)).to eq(false)
|
||||
|
||||
group.update_columns(members_visibility_level: Group.visibility_levels[:staff])
|
||||
|
||||
expect(can_view?(admin, group)).to eq(true)
|
||||
expect(can_view?(owner, group)).to eq(true)
|
||||
expect(can_view?(moderator, group)).to eq(true)
|
||||
expect(can_view?(member, group)).to eq(false)
|
||||
expect(can_view?(logged_on_user, group)).to eq(false)
|
||||
expect(can_view?(nil, group)).to eq(false)
|
||||
|
||||
group.update_columns(members_visibility_level: Group.visibility_levels[:members])
|
||||
|
||||
expect(can_view?(admin, group)).to eq(true)
|
||||
expect(can_view?(owner, group)).to eq(true)
|
||||
expect(can_view?(moderator, group)).to eq(false)
|
||||
expect(can_view?(member, group)).to eq(true)
|
||||
expect(can_view?(logged_on_user, group)).to eq(false)
|
||||
expect(can_view?(nil, group)).to eq(false)
|
||||
|
||||
group.update_columns(members_visibility_level: Group.visibility_levels[:public])
|
||||
|
||||
expect(can_view?(admin, group)).to eq(true)
|
||||
expect(can_view?(owner, group)).to eq(true)
|
||||
expect(can_view?(moderator, group)).to eq(true)
|
||||
expect(can_view?(member, group)).to eq(true)
|
||||
expect(can_view?(logged_on_user, group)).to eq(true)
|
||||
expect(can_view?(nil, group)).to eq(true)
|
||||
|
||||
group.update_columns(members_visibility_level: Group.visibility_levels[:logged_on_users])
|
||||
|
||||
expect(can_view?(admin, group)).to eq(true)
|
||||
expect(can_view?(owner, group)).to eq(true)
|
||||
expect(can_view?(moderator, group)).to eq(true)
|
||||
expect(can_view?(member, group)).to eq(true)
|
||||
expect(can_view?(logged_on_user, group)).to eq(true)
|
||||
expect(can_view?(nil, group)).to eq(false)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
describe '#remove' do
|
||||
before { group.add(user) }
|
||||
|
||||
|
Reference in New Issue
Block a user