From 25b7f169e365b2fd403a2c7e3f5b62fbcb252d32 Mon Sep 17 00:00:00 2001 From: ogerly Date: Sun, 23 Feb 2020 06:38:22 +0100 Subject: [PATCH 01/27] feature: add New Moadal - deleteUserModal --- .../DeleteUserModal/DeleteUserModal.vue | 81 +++++++++++++++++++ webapp/components/Modal.vue | 9 +++ webapp/pages/admin/users.vue | 22 +++++ 3 files changed, 112 insertions(+) create mode 100644 webapp/components/DeleteUserModal/DeleteUserModal.vue diff --git a/webapp/components/DeleteUserModal/DeleteUserModal.vue b/webapp/components/DeleteUserModal/DeleteUserModal.vue new file mode 100644 index 000000000..cec490d53 --- /dev/null +++ b/webapp/components/DeleteUserModal/DeleteUserModal.vue @@ -0,0 +1,81 @@ + + + diff --git a/webapp/components/Modal.vue b/webapp/components/Modal.vue index 84a1871b5..861dbe6b7 100644 --- a/webapp/components/Modal.vue +++ b/webapp/components/Modal.vue @@ -30,6 +30,13 @@ :modalData="data.modalData" @close="close" /> + @@ -38,6 +45,7 @@ import ConfirmModal from '~/components/Modal/ConfirmModal' import DisableModal from '~/components/Modal/DisableModal' import ReleaseModal from '~/components/ReleaseModal/ReleaseModal.vue' import ReportModal from '~/components/Modal/ReportModal' +import DeleteModal from '~/components/DeleteUserModal/DeleteUserModal.vue' import { mapGetters } from 'vuex' export default { @@ -47,6 +55,7 @@ export default { ReleaseModal, ReportModal, ConfirmModal, + DeleteModal, }, computed: { ...mapGetters({ diff --git a/webapp/pages/admin/users.vue b/webapp/pages/admin/users.vue index 4b8ca6ffe..d05bcf6e5 100644 --- a/webapp/pages/admin/users.vue +++ b/webapp/pages/admin/users.vue @@ -48,6 +48,11 @@ + @@ -111,6 +116,10 @@ export default { label: this.$t('admin.users.table.columns.role'), align: 'right', }, + delete: { + label: '-', + align: 'right', + }, } }, }, @@ -155,6 +164,16 @@ export default { }, }, methods: { + openModal() { + this.$store.commit('modal/SET_OPEN', { + name: 'delete', + data: { + type: 'sss', + resource: 'dfdd', + modalData: {}, + }, + }) + }, back() { this.offset = Math.max(this.offset - this.pageSize, 0) }, @@ -174,6 +193,9 @@ export default { } } }, + deleteUser(dd) { + this.openModal() + }, }, } From fdc0f492adf3d4bf7b4f1492753d486f6eb4e5d9 Mon Sep 17 00:00:00 2001 From: ogerly Date: Sun, 23 Feb 2020 17:36:23 +0100 Subject: [PATCH 02/27] stepstep --- webapp/components/DeleteData/DeleteData.vue | 13 ++++++++ .../DeleteUserModal/DeleteUserModal.vue | 33 +++++++++++++++++-- webapp/pages/admin/users.vue | 16 +++++---- 3 files changed, 53 insertions(+), 9 deletions(-) diff --git a/webapp/components/DeleteData/DeleteData.vue b/webapp/components/DeleteData/DeleteData.vue index 1157fc922..fbd13b32e 100644 --- a/webapp/components/DeleteData/DeleteData.vue +++ b/webapp/components/DeleteData/DeleteData.vue @@ -28,6 +28,7 @@

{{ $t('settings.deleteUserAccount.accountWarning') }}

+ ACHTUNG! Du Bist Admin!! -

+ @@ -164,13 +164,14 @@ export default { }, }, methods: { - openModal() { + openModal(userdata) { + console.log("openModal", userdata) this.$store.commit('modal/SET_OPEN', { name: 'delete', data: { - type: 'sss', - resource: 'dfdd', - modalData: {}, + id: 'sss', + type: 'dfdd', + name: {}, }, }) }, @@ -193,8 +194,9 @@ export default { } } }, - deleteUser(dd) { - this.openModal() + deleteUser(userdata) { + console.log("deleteUser", userdata) + this.openModal(userdata) }, }, } From 9ab2d8395f85d51d3ea47e2e239fe865521343ec Mon Sep 17 00:00:00 2001 From: ogerly Date: Wed, 4 Mar 2020 16:23:00 +0100 Subject: [PATCH 03/27] feat: DeleteUser for Admin added in the profile dropdown menu, deleted from the Admin user overview --- .../src/middleware/permissionsMiddleware.js | 8 ++- backend/src/schema/resolvers/users.js | 5 +- webapp/components/ContentMenu/ContentMenu.vue | 18 +++++ webapp/components/DeleteData/DeleteData.vue | 36 +++++----- .../DeleteUserModal/DeleteUserModal.vue | 72 ++++++------------- webapp/components/Modal.vue | 12 ++-- webapp/locales/de.json | 5 +- webapp/locales/en.json | 3 + webapp/pages/admin/users.vue | 24 ------- webapp/pages/profile/_id/_slug.vue | 11 +++ 10 files changed, 89 insertions(+), 105 deletions(-) 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') }} -

{{ $t('settings.deleteUserAccount.accountDescription') }}

-