Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wiki-js
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
wiki-js
Commits
f09f1f4f
Commit
f09f1f4f
authored
Dec 22, 2019
by
NGPixel
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: delete a user
parent
3b347f26
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
135 additions
and
21 deletions
+135
-21
admin-users-create.vue
client/components/admin/admin-users-create.vue
+2
-1
admin-users-edit.vue
client/components/admin/admin-users-edit.vue
+72
-15
users-mutation-delete.gql
client/graph/admin/users/users-mutation-delete.gql
+12
-0
user.js
server/graph/resolvers/user.js
+19
-5
error.js
server/helpers/error.js
+8
-0
definition.yml
server/modules/rendering/openapi-core/definition.yml
+8
-0
renderer.js
server/modules/rendering/openapi-core/renderer.js
+14
-0
No files found.
client/components/admin/admin-users-create.vue
View file @
f09f1f4f
...
...
@@ -57,7 +57,8 @@
prepend-icon='mdi-account-group'
v-model='group'
label='Assign to Group(s)...'
dense
hint='Note that you cannot assign users to the Administrators or Guests groups from this dialog.'
persistent-hint
clearable
multiple
)
...
...
client/components/admin/admin-users-edit.vue
View file @
f09f1f4f
...
...
@@ -23,23 +23,30 @@
v-spacer
i18next.caption.grey--text.animated.fadeInRight.wait-p5s(path='admin:users.id', tag='div')
strong(place='id')
{{
user
.
id
}}
v-divider.animated.fadeInRight.wait-p
3
s.ml-3(vertical)
v-btn.ml-3.animated.fadeInDown.wait-p
2
s(color='grey', large, outlined, to='/users')
v-divider.animated.fadeInRight.wait-p
4
s.ml-3(vertical)
v-btn.ml-3.animated.fadeInDown.wait-p
3
s(color='grey', large, outlined, to='/users')
v-icon mdi-arrow-left
v-
dialog(v-model='deleteUserDialog', max-width='500', v-if='user.id !== currentUserId && !user.isSystem
')
v-
menu(offset-y, origin='top right
')
template(v-slot:activator='{ on }')
v-btn.ml-3.animated.fadeInDown.wait-p1s(color='red', large, outlined, v-on='on', disabled)
v-icon(color='red') mdi-trash-can-outline
v-card
.dialog-header.is-red Delete User?
v-card-text Are you sure you want to delete user #[strong
{{
user
.
name
}}
]?
v-card-actions
v-spacer
v-btn(text, @click='deleteUserDialog = false') Cancel
v-btn(color='red', dark, @click='deleteUser') Delete
v-btn.ml-3.animated.fadeInDown.wait-p2s(color='indigo', v-on='on', large, depressed, dark)
span Actions
v-icon(right) mdi-chevron-down
v-list(dense, nav)
v-list-item(v-if='!user.isActive', @click='activateUser')
v-list-item-icon
v-icon(color='purple') mdi-steering
v-list-item-title Activate
v-list-item(v-else, @click='deactivateUser', :disabled='user.id == currentUserId || user.isSystem')
v-list-item-icon
v-icon(color='purple') mdi-cancel
v-list-item-title Deactivate
v-list-item(@click='deleteUserDialog = true', :disabled='user.id == currentUserId || user.isSystem')
v-list-item-icon
v-icon(color='red') mdi-trash-can-outline
v-list-item-title Delete
v-btn.ml-3.animated.fadeInDown(color='primary', large, depressed, @click='updateUser')
v-icon(left) mdi-check
span
Update User
span
{{
$t
(
'admin:users.updateUser'
)
}}
v-flex(xs6)
v-card.animated.fadeInUp
v-toolbar(color='primary', dense, dark, flat)
...
...
@@ -208,7 +215,6 @@
item-disabled='isSystem'
solo
flat
dense
hide-details
@keydown.esc='editPop.assignGroup = false'
style='max-width: 300px;'
...
...
@@ -216,6 +222,10 @@
v-btn.ml-2.px-4(depressed, color='primary', height='48', @click='assignGroup', :disabled='newGroup === 0')
v-icon(left) mdi-clipboard-account-outline
span
{{
$t
(
'admin:users.groupAssign'
)
}}
v-system-bar(window, :color='$vuetify.theme.dark ? `grey darken-4-l3` : `grey lighten-3`')
v-spacer
.caption
{{
$t
(
'admin:users.groupAssignNotice'
)
}}
v-flex(xs6)
v-card.animated.fadeInUp.wait-p2s
v-toolbar(color='primary', dense, dark, flat)
...
...
@@ -317,6 +327,18 @@
v-card-text
em.caption.grey--text Coming soon
v-dialog(v-model='deleteUserDialog', max-width='500')
v-card
.dialog-header.is-red
{{
$t
(
'admin:users.deleteConfirmTitle'
)
}}
v-card-text.pt-5
i18next(path='admin:users.deleteConfirmText', tag='span')
strong(place='username')
{{
user
.
email
}}
.caption.mt-3
{{
$t
(
'admin:users.deleteConfirmForeignNotice'
)
}}
v-card-actions
v-spacer
v-btn(text, @click='deleteUserDialog = false')
{{
$t
(
'common:actions.cancel'
)
}}
v-btn(color='red', dark, @click='deleteUser')
{{
$t
(
'common:actions.delete'
)
}}
</
template
>
<
script
>
import
_
from
'lodash'
...
...
@@ -327,6 +349,7 @@ import { StatusIndicator } from 'vue-status-indicator'
import
userQuery
from
'gql/admin/users/users-query-single.gql'
import
groupsQuery
from
'gql/admin/users/users-query-groups.gql'
import
updateUserMutation
from
'gql/admin/users/users-mutation-update.gql'
import
deleteUserMutation
from
'gql/admin/users/users-mutation-delete.gql'
export
default
{
components
:
{
...
...
@@ -615,7 +638,41 @@ export default {
currentUserId
:
get
(
'user/id'
)
},
methods
:
{
deleteUser
()
{},
async
activateUser
()
{
},
async
deactivateUser
()
{
this
.
$store
.
commit
(
'showNotification'
,
{
style
:
'indigo'
,
message
:
`Coming soon...`
,
icon
:
'directions_boat'
})
},
async
deleteUser
()
{
this
.
$store
.
commit
(
`loadingStart`
,
'admin-users-delete'
)
const
resp
=
await
this
.
$apollo
.
mutate
({
mutation
:
deleteUserMutation
,
variables
:
{
id
:
this
.
user
.
id
}
})
if
(
_
.
get
(
resp
,
'data.users.delete.responseResult.succeeded'
,
false
))
{
this
.
$store
.
commit
(
'showNotification'
,
{
style
:
'success'
,
message
:
this
.
$t
(
'admin:users.userDeleteSuccess'
),
icon
:
'check'
})
this
.
$router
.
push
(
'/users'
)
}
else
{
this
.
$store
.
commit
(
'showNotification'
,
{
style
:
'red'
,
message
:
_
.
get
(
resp
,
'data.users.delete.responseResult.message'
,
'An unexpected error occured.'
),
icon
:
'warning'
})
}
this
.
deleteUserDialog
=
false
this
.
$store
.
commit
(
`loadingStop`
,
'admin-users-delete'
)
},
async
updateUser
()
{
this
.
$store
.
commit
(
`loadingStart`
,
'admin-users-update'
)
const
resp
=
await
this
.
$apollo
.
mutate
({
...
...
client/graph/admin/users/users-mutation-delete.gql
0 → 100644
View file @
f09f1f4f
mutation
(
$id
:
Int
!)
{
users
{
delete
(
id
:
$id
)
{
responseResult
{
succeeded
errorCode
slug
message
}
}
}
}
server/graph/resolvers/user.js
View file @
f09f1f4f
...
...
@@ -29,7 +29,7 @@ module.exports = {
}
},
UserMutation
:
{
async
create
(
obj
,
args
)
{
async
create
(
obj
,
args
)
{
try
{
await
WIKI
.
models
.
users
.
createNewUser
(
args
)
...
...
@@ -40,10 +40,24 @@ module.exports = {
return
graphHelper
.
generateError
(
err
)
}
},
delete
(
obj
,
args
)
{
return
WIKI
.
models
.
users
.
query
().
deleteById
(
args
.
id
)
async
delete
(
obj
,
args
)
{
try
{
if
(
args
.
id
<=
2
)
{
throw
new
WIKI
.
Error
.
UserDeleteProtected
()
}
await
WIKI
.
models
.
users
.
query
().
deleteById
(
args
.
id
)
return
{
responseResult
:
graphHelper
.
generateSuccess
(
'User deleted successfully'
)
}
}
catch
(
err
)
{
if
(
err
.
message
.
indexOf
(
'foreign'
)
>=
0
)
{
return
graphHelper
.
generateError
(
new
WIKI
.
Error
.
UserDeleteForeignConstraint
())
}
else
{
return
graphHelper
.
generateError
(
err
)
}
}
},
async
update
(
obj
,
args
)
{
async
update
(
obj
,
args
)
{
try
{
await
WIKI
.
models
.
users
.
updateUser
(
args
)
...
...
@@ -54,7 +68,7 @@ module.exports = {
return
graphHelper
.
generateError
(
err
)
}
},
resetPassword
(
obj
,
args
)
{
resetPassword
(
obj
,
args
)
{
return
false
}
},
...
...
server/helpers/error.js
View file @
f09f1f4f
...
...
@@ -169,6 +169,14 @@ module.exports = {
message
:
'An unexpected error occured during user creation.'
,
code
:
1009
}),
UserDeleteForeignConstraint
:
CustomError
(
'UserCreationFailed'
,
{
message
:
'Cannot delete user because of content relational constraints.'
,
code
:
1017
}),
UserDeleteProtected
:
CustomError
(
'UserDeleteProtected'
,
{
message
:
'Cannot delete a protected system account.'
,
code
:
1018
}),
UserNotFound
:
CustomError
(
'UserNotFound'
,
{
message
:
'This user does not exist.'
,
code
:
1016
...
...
server/modules/rendering/openapi-core/definition.yml
0 → 100644
View file @
f09f1f4f
key
:
openapiCore
title
:
Core
description
:
Basic OpenAPI Parser
author
:
requarks.io
input
:
openapi
output
:
html
icon
:
mdi-api
props
:
{}
server/modules/rendering/openapi-core/renderer.js
0 → 100644
View file @
f09f1f4f
const
_
=
require
(
'lodash'
)
module
.
exports
=
{
async
render
()
{
let
output
=
this
.
input
for
(
let
child
of
this
.
children
)
{
const
renderer
=
require
(
`../
${
_
.
kebabCase
(
child
.
key
)}
/renderer.js`
)
output
=
await
renderer
.
init
(
output
,
child
.
config
)
}
return
output
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment