Skip to content

Commit 61155dc

Browse files
authored
Merge pull request #711 from code0-tech/695-adjust-queryorganizations-to-return-all-organizations-visible-to-the-current-user
Admin can query all organizations
2 parents 1ed83f5 + 914de5b commit 61155dc

File tree

5 files changed

+29
-2
lines changed

5 files changed

+29
-2
lines changed

app/graphql/types/query_type.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,8 @@ def organization(**args)
8989
end
9090

9191
def organizations
92+
return Organization.all if current_user&.admin?
93+
9294
OrganizationsFinder.new(namespace_member_user: current_user).execute
9395
end
9496

app/policies/base_policy.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,5 @@ def user
2121
# rubocop:enable Rails/Delegate
2222

2323
condition(:anonymous) { authentication.nil? || authentication.type == :none }
24+
condition(:admin) { user&.admin? }
2425
end

app/policies/concerns/customizable_permission.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,14 @@ def namespace_resolver(&block)
1313
def customizable_permission(ability)
1414
condition(ability) { user_has_ability?(ability, user, subject) }
1515

16-
rule { send(ability) | admin }.enable ability
16+
rule { send(ability) | namespace_admin }.enable ability
1717
end
1818
end
1919

2020
included do
21-
condition(:admin) { user_has_ability?(:namespace_administrator, user, subject) || can?(:namespace_administrator) }
21+
condition(:namespace_admin) do
22+
user_has_ability?(:namespace_administrator, user, subject) || can?(:namespace_administrator)
23+
end
2224

2325
def namespace(subject)
2426
@namespace ||= self.class.namespace_resolver_block.call(subject)

app/policies/namespace_policy.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@ class NamespacePolicy < BasePolicy
88
condition(:is_user_namespace) { subject.user_type? }
99
condition(:is_owner) { subject.parent == user }
1010

11+
rule { admin }.policy do
12+
enable :namespace_administrator
13+
enable :has_access
14+
end
15+
1116
rule { is_member }.enable :has_access
1217

1318
rule { is_user_namespace & is_owner }.policy do

spec/requests/graphql/query/organizations_query_spec.rb

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,23 @@
2727
create(:organization) # organization where the user isn't a member
2828
end
2929

30+
context 'when admin' do
31+
let(:current_user) { create(:user, :admin) }
32+
33+
before do
34+
(1..3).each do |_|
35+
create(:organization)
36+
end
37+
38+
query!
39+
end
40+
41+
it 'returns all organizations' do
42+
organization_graphql_entities = Organization.all.map { |org| a_graphql_entity_for(org) }
43+
expect(graphql_data_at(:organizations, :nodes)).to match_array(organization_graphql_entities)
44+
end
45+
end
46+
3047
context 'when anonymous' do
3148
it 'does not return organizations' do
3249
query!

0 commit comments

Comments
 (0)