From a5df793c55ec8792066e61547ae287f7702675fd Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Tue, 16 Feb 2021 13:12:18 +0100 Subject: [PATCH] avoid introspection to get available roles as admin --- backend/src/middleware/permissionsMiddleware.js | 1 + backend/src/schema/resolvers/roles.js | 7 +++++++ backend/src/schema/types/enum/UserGroup.gql | 2 +- backend/src/schema/types/type/User.gql | 1 + webapp/graphql/admin/Roles.js | 7 +------ webapp/pages/admin/users.vue | 4 ++-- 6 files changed, 13 insertions(+), 9 deletions(-) create mode 100644 backend/src/schema/resolvers/roles.js diff --git a/backend/src/middleware/permissionsMiddleware.js b/backend/src/middleware/permissionsMiddleware.js index af70ca2fd..fe201e4cb 100644 --- a/backend/src/middleware/permissionsMiddleware.js +++ b/backend/src/middleware/permissionsMiddleware.js @@ -122,6 +122,7 @@ export default shield( MyInviteCodes: isAuthenticated, isValidInviteCode: allow, queryLocations: isAuthenticated, + availableRoles: isAdmin, }, Mutation: { '*': deny, diff --git a/backend/src/schema/resolvers/roles.js b/backend/src/schema/resolvers/roles.js new file mode 100644 index 000000000..be9861e08 --- /dev/null +++ b/backend/src/schema/resolvers/roles.js @@ -0,0 +1,7 @@ +export default { + Query: { + availableRoles: async (_parent, args, context, _resolveInfo) => { + return ['admin', 'moderator', 'user'] + }, + }, +} diff --git a/backend/src/schema/types/enum/UserGroup.gql b/backend/src/schema/types/enum/UserGroup.gql index af25bcc69..587e90c71 100644 --- a/backend/src/schema/types/enum/UserGroup.gql +++ b/backend/src/schema/types/enum/UserGroup.gql @@ -2,4 +2,4 @@ enum UserGroup { admin moderator user -} \ No newline at end of file +} diff --git a/backend/src/schema/types/type/User.gql b/backend/src/schema/types/type/User.gql index 2290cd4ce..b8b805a02 100644 --- a/backend/src/schema/types/type/User.gql +++ b/backend/src/schema/types/type/User.gql @@ -170,6 +170,7 @@ type Query { filter: _UserFilter ): [User] + availableRoles: [UserGroup]! mutedUsers: [User] blockedUsers: [User] isLoggedIn: Boolean! diff --git a/webapp/graphql/admin/Roles.js b/webapp/graphql/admin/Roles.js index 531961656..8c1a9f412 100644 --- a/webapp/graphql/admin/Roles.js +++ b/webapp/graphql/admin/Roles.js @@ -3,12 +3,7 @@ import gql from 'graphql-tag' export const FetchAllRoles = () => { return gql` query { - __type(name: "UserGroup") { - name - enumValues { - name - } - } + availableRoles } ` } diff --git a/webapp/pages/admin/users.vue b/webapp/pages/admin/users.vue index e8b4cfdf5..6c324fd97 100644 --- a/webapp/pages/admin/users.vue +++ b/webapp/pages/admin/users.vue @@ -178,8 +178,8 @@ export default { query() { return FetchAllRoles() }, - update({ __type }) { - return __type.enumValues.map((item) => item.name) + update({ availableRoles }) { + return availableRoles }, }, },