diff --git a/backend/src/middleware/permissionsMiddleware.js b/backend/src/middleware/permissionsMiddleware.js index 10dc98845..d307eaacc 100644 --- a/backend/src/middleware/permissionsMiddleware.js +++ b/backend/src/middleware/permissionsMiddleware.js @@ -68,7 +68,11 @@ const isAuthor = rule({ const isDeletingOwnAccount = rule({ cache: 'no_cache', })(async (parent, args, context, info) => { - return context.user.id === args.id + if (isAdmin === true) { + return true + } else { + return context.user.id === args.id + } }) const noEmailFilter = rule({ @@ -133,7 +137,7 @@ export default shield( CreateComment: isAuthenticated, UpdateComment: isAuthor, DeleteComment: isAuthor, - DeleteUser: isDeletingOwnAccount, + DeleteUser: or(isDeletingOwnAccount, isAdmin), requestPasswordReset: allow, resetPassword: allow, AddPostEmotions: isAuthenticated, diff --git a/backend/src/schema/resolvers/users.js b/backend/src/schema/resolvers/users.js index a1b68e20d..f68f4c2c5 100644 --- a/backend/src/schema/resolvers/users.js +++ b/backend/src/schema/resolvers/users.js @@ -174,6 +174,7 @@ export default { }, DeleteUser: async (object, params, context, resolveInfo) => { const { resource } = params + const { id } = params const session = context.driver.session() try { if (resource && resource.length) { @@ -190,7 +191,7 @@ export default { RETURN author `, { - userId: context.user.id, + userId: id, }, ) }) @@ -212,7 +213,7 @@ export default { DETACH DELETE socialMedia RETURN user `, - { userId: context.user.id }, + { userId: id }, ) log(deleteUserTransactionResponse) return deleteUserTransactionResponse.records.map(record => record.get('user').properties) diff --git a/webapp/components/ContentMenu/ContentMenu.vue b/webapp/components/ContentMenu/ContentMenu.vue index c69a2fcbc..4526fb6f4 100644 --- a/webapp/components/ContentMenu/ContentMenu.vue +++ b/webapp/components/ContentMenu/ContentMenu.vue @@ -154,6 +154,15 @@ export default { path: '/settings', icon: 'edit', }) + if (this.isAdmin === true) { + routes.push({ + label: this.$t(`settings.deleteUserAccount.name`), + callback: () => { + this.$emit('delete', this.resource) + }, + icon: 'trash', + }) + } } else { if (this.resource.isMuted) { routes.push({ @@ -189,6 +198,15 @@ export default { icon: 'user-times', }) } + if (this.isAdmin === true) { + routes.push({ + label: this.$t(`settings.deleteUserAccount.name`), + callback: () => { + this.$emit('delete', this.resource) + }, + icon: 'trash', + }) + } } } diff --git a/webapp/components/DeleteData/DeleteData.vue b/webapp/components/DeleteData/DeleteData.vue index fbd13b32e..6c1730b79 100644 --- a/webapp/components/DeleteData/DeleteData.vue +++ b/webapp/components/DeleteData/DeleteData.vue @@ -4,12 +4,14 @@ {{ $t('settings.deleteUserAccount.name') }} -