Skip to content

Commit 191be80

Browse files
committed
add adminStatusVisible application setting
1 parent 4822ebd commit 191be80

File tree

9 files changed

+25
-2
lines changed

9 files changed

+25
-2
lines changed

app/graphql/mutations/application_settings/update.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ class Update < BaseMutation
88
field :application_settings, Types::ApplicationSettingsType, null: true,
99
description: 'The updated application settings.'
1010

11+
argument :admin_status_visible, Boolean,
12+
required: false,
13+
description: 'Set if admin status can be queried by non-administrators.'
1114
argument :organization_creation_restricted, Boolean,
1215
required: false,
1316
description: 'Set if organization creation is restricted to administrators.'

app/graphql/types/application_settings_type.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,9 @@ class ApplicationSettingsType < Types::BaseObject
1212
field :organization_creation_restricted, Boolean,
1313
null: false,
1414
description: 'Shows if organization creation is restricted to administrators'
15+
16+
field :admin_status_visible, Boolean,
17+
null: false,
18+
description: 'Shows if admin status can be queried by non-administrators'
1519
end
1620
end

app/graphql/types/user_type.rb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@ class UserType < Types::BaseObject
88

99
field :avatar_path, String, null: true, description: 'The avatar if present of the user'
1010

11-
field :admin, Boolean, null: false, description: 'Global admin status of the user'
11+
field :admin, Boolean,
12+
null: false,
13+
description: 'Global admin status of the user',
14+
authorize: :read_admin_status
1215
field :email, String, null: true, description: 'Email of the user', authorize: :read_email
1316
field :email_verified_at, Types::TimeType,
1417
null: true,

app/models/application_setting.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,10 @@ class ApplicationSetting < ApplicationRecord
1111
user_registration_enabled: 1,
1212
organization_creation_restricted: 2,
1313
identity_providers: 3,
14+
admin_status_visible: 4,
1415
}.with_indifferent_access
1516

16-
BOOLEAN_OPTIONS = %i[user_registration_enabled organization_creation_restricted].freeze
17+
BOOLEAN_OPTIONS = %i[user_registration_enabled organization_creation_restricted admin_status_visible].freeze
1718

1819
enum :setting, SETTINGS
1920

app/policies/user_policy.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
class UserPolicy < BasePolicy
44
condition(:user_is_self) { subject.id == user&.id }
55
condition(:user_is_admin) { user&.admin? || false }
6+
condition(:admin_status_visible) { ApplicationSetting.current[:admin_status_visible] }
67

78
rule { ~anonymous }.enable :read_user
89

@@ -12,8 +13,11 @@ class UserPolicy < BasePolicy
1213
enable :update_attachment_avatar
1314
enable :read_email
1415
enable :delete_user
16+
enable :read_admin_status
1517
end
1618

19+
rule { admin_status_visible & ~anonymous }.enable :read_admin_status
20+
1721
rule { user_is_self }.policy do
1822
enable :read_user_identity
1923
enable :manage_mfa

db/fixtures/01_application_settings.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,8 @@
1414
s.setting = :identity_providers
1515
s.value = []
1616
end
17+
18+
ApplicationSetting.seed_once :setting do |s|
19+
s.setting = :admin_status_visible
20+
s.value = true
21+
end

docs/graphql/mutation/applicationsettingsupdate.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ Update application settings.
88

99
| Name | Type | Description |
1010
|------|------|-------------|
11+
| `adminStatusVisible` | [`Boolean`](../scalar/boolean.md) | Set if admin status can be queried by non-administrators. |
1112
| `clientMutationId` | [`String`](../scalar/string.md) | A unique identifier for the client performing the mutation. |
1213
| `organizationCreationRestricted` | [`Boolean`](../scalar/boolean.md) | Set if organization creation is restricted to administrators. |
1314
| `userRegistrationEnabled` | [`Boolean`](../scalar/boolean.md) | Set if user registration is enabled. |

docs/graphql/object/applicationsettings.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ Represents the application settings
88

99
| Name | Type | Description |
1010
|------|------|-------------|
11+
| `adminStatusVisible` | [`Boolean!`](../scalar/boolean.md) | Shows if admin status can be queried by non-administrators |
1112
| `organizationCreationRestricted` | [`Boolean!`](../scalar/boolean.md) | Shows if organization creation is restricted to administrators |
1213
| `userRegistrationEnabled` | [`Boolean!`](../scalar/boolean.md) | Shows if user registration is enabled |
1314

spec/graphql/types/application_settings_type_spec.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
%w[
88
userRegistrationEnabled
99
organizationCreationRestricted
10+
adminStatusVisible
1011
]
1112
end
1213

0 commit comments

Comments
 (0)