diff --git a/admin/src/graphql/deleteUser.js b/admin/src/graphql/deleteUser.js index 9e3606bd7..3b9bc73b2 100644 --- a/admin/src/graphql/deleteUser.js +++ b/admin/src/graphql/deleteUser.js @@ -1,7 +1,7 @@ import gql from 'graphql-tag' export const deleteUser = gql` - mutation ($userId: Int!) { + mutation ($userId: Float!) { deleteUser(userId: $userId) } ` diff --git a/backend/src/auth/RIGHTS.ts b/backend/src/auth/RIGHTS.ts index cca4365fe..b7b23c931 100644 --- a/backend/src/auth/RIGHTS.ts +++ b/backend/src/auth/RIGHTS.ts @@ -26,4 +26,5 @@ export enum RIGHTS { DELETE_PENDING_CREATION = 'DELETE_PENDING_CREATION', CONFIRM_PENDING_CREATION = 'CONFIRM_PENDING_CREATION', SEND_ACTIVATION_EMAIL = 'SEND_ACTIVATION_EMAIL', + DELETE_USER = 'DELETE_USER', } diff --git a/backend/src/graphql/resolver/AdminResolver.ts b/backend/src/graphql/resolver/AdminResolver.ts index fd12af0f8..484fad7d8 100644 --- a/backend/src/graphql/resolver/AdminResolver.ts +++ b/backend/src/graphql/resolver/AdminResolver.ts @@ -95,6 +95,25 @@ export class AdminResolver { } } + @Authorized([RIGHTS.DELETE_USER]) + @Mutation(() => Boolean) + async deleteUser(@Arg('userId') userId: number, @Ctx() context: any): Promise { + const user = await User.findOne({ id: userId }) + // user exists ? + if (!user) { + throw new Error(`Could not find user with userId: ${userId}`) + } + // moderator user disabled own account? + const userRepository = getCustomRepository(UserRepository) + const moderatorUser = await userRepository.findByPubkeyHex(context.pubKey) + if (moderatorUser.id === userId) { + throw new Error('Moderator can not delete his own account!') + } + // soft-delete user + await user.softRemove() + return true + } + @Authorized([RIGHTS.CREATE_PENDING_CREATION]) @Mutation(() => [Number]) async createPendingCreation(