From 26c3107750ef53243e26dd326b731a7fbebfbe3a Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Fri, 15 Jan 2021 15:39:51 +0100 Subject: [PATCH] setup for switch iser role as admin --- .../src/middleware/permissionsMiddleware.js | 1 + backend/src/schema/resolvers/users.js | 24 +++++++++++++++++++ backend/src/schema/types/type/User.gql | 2 ++ 3 files changed, 27 insertions(+) diff --git a/backend/src/middleware/permissionsMiddleware.js b/backend/src/middleware/permissionsMiddleware.js index f4f8c654b..734931df2 100644 --- a/backend/src/middleware/permissionsMiddleware.js +++ b/backend/src/middleware/permissionsMiddleware.js @@ -149,6 +149,7 @@ export default shield( pinPost: isAdmin, unpinPost: isAdmin, UpdateDonations: isAdmin, + switchUserRole: isAdmin, }, User: { email: or(isMyOwn, isAdmin), diff --git a/backend/src/schema/resolvers/users.js b/backend/src/schema/resolvers/users.js index e276968e5..789ca2a37 100644 --- a/backend/src/schema/resolvers/users.js +++ b/backend/src/schema/resolvers/users.js @@ -244,6 +244,30 @@ export default { session.close() } }, + switchUserRole: async (object, args, context, resolveInfo) => { + const { role, id } = args + + const session = context.driver.session() + const writeTxResultPromise = session.writeTransaction(async (transaction) => { + const switchUserRoleResponse = await transaction.run( + ` + MATCH (user:User {id: $id}) + SET user.role = $role + SET user.updatedAt = toString(datetime()) + RETURN user {.*} + `, + { id, role }, + ) + const [user] = switchUserRoleResponse.records.map((record) => record.get('user')) + return user + }) + try { + const user = await writeTxResultPromise + return user + } finally { + session.close() + } + }, }, User: { email: async (parent, params, context, resolveInfo) => { diff --git a/backend/src/schema/types/type/User.gql b/backend/src/schema/types/type/User.gql index e6e7191c5..17115c5ab 100644 --- a/backend/src/schema/types/type/User.gql +++ b/backend/src/schema/types/type/User.gql @@ -212,4 +212,6 @@ type Mutation { unmuteUser(id: ID!): User blockUser(id: ID!): User unblockUser(id: ID!): User + + switchUserRole(role: UserGroup!, id: ID!): User }