Users
strapi user system
look at this if you are not familiar with Strapi users, roles and permissions system. like roles, we need to manage all suers inside our dashboard instead of strapi panel. so we need to create a simple CRUD for this purpose.
list of users
create a folder (route) for user management like following:
pages/admin/system/users
create index.vue
and use ListPage component to create a table list.
index.vue
<template>
<list-page v-model="main"/>
</template>
<script>
import fields from "./fields";
import Info from "./config";
export default {
head() {
return {
title: Info.title
}
},
data() {
return {
main: {
fields,
...Info
}
}
}
}
</script>
config.js
config.js
const config = {
title: 'users',
resource: 'users',
name: '/admin/system/users', // web path - like admin/sample/ssr-list
}
export default config;
fields.js
for fields
fields.js
export default [
{
text: 'id',
align: 'start',
sortable: true,
value: 'id',
header: false,
edit: false,
create: false,
show: true,
filterable: true,
type: 'text',
searchable: false,
},
{
text: 'username',
value: 'username',
type: 'text', // textarea bool img rich price date
header: true,
table: true,
show: true,
pop: true,
edit: true,
align: 'start', // end
sortable: true,
searchable: true,
filterable: true,
colFilter: true, // true,
role: '', // null
permission: '', // null
},
{
text: 'password',
value: 'password',
type: 'password', // textarea bool img rich price date
header: false,
table: false,
show: false,
pop: false,
edit: true,
create: true,
align: 'start', // end
sortable: true,
searchable: true,
filterable: true,
colFilter: true, // true,
role: '', // null
permission: '', // null
},
{
text: 'email',
value: 'email',
type: 'text', // textarea bool img rich price date
header: true,
show: true,
pop: true,
edit: true,
align: 'start', // end
sortable: true,
searchable: true,
filterable: true,
colFilter: true, // true,
role: '', // null
permission: '', // null
},
{
text: 'role',
value: 'role',
type: 'select', // textarea bool img rich price date
meta: {
text: 'name',
value: 'id'
},
store: 'roles',
header: true,
show: true,
pop: true,
edit: true,
align: 'start', // end
sortable: true,
searchable: true,
filterable: true,
colFilter: true, // true,
role: '', // null
permission: '', // null
},
{
text: 'confirm',
value: 'confirmed',
type: 'bool', // textarea bool img rich price date
header: true,
show: true,
pop: true,
edit: true,
create: true,
expand: true,
align: 'center', // end
sortable: true,
searchable: false,
filterable: true,
colFilter: true, // true,
},
{
text: 'blocked',
value: 'blocked',
type: 'bool', // textarea bool img rich price date
header: true,
show: true,
pop: true,
edit: true,
expand: true,
align: 'center', // end
sortable: true,
searchable: false,
filterable: true,
colFilter: true, // true,
},
{
text: '',
value: 'actions',
header: true,
expand: false,
show: false,
edit: false,
pop: false,
create: false,
sortable: false,
searchable: false,
filterable: false,
align: 'left'
}
];
your users list should be like this
manage user
create following file in users folder (or whenever you want):
-- /admin/system/users/edit/_id.vue
-- /admin/system/users/create.vue
-- /admin/system/users/_id.vue
edit user
put this code in edit/_id.vue
file:
_id.vue
<template>
<data-form-page
v-model="main"
:id="id"
/>
</template>
<script>
import Fields from "../fields";
import Info from "../config";
export default {
head() {
return {
title: Info.title
}
},
data() {
return {
id: undefined,
main: {
data: {},
fields: Fields,
...Info,
}
}
},
async asyncData({params}) {
return {id: params.id}
}
}
</script>
create user
put this code in create.vue
:
create.vue
<template>
<data-form-page
v-model="main"
/>
</template>
<script>
import fields from "./fields";
import Info from "./config";
export default {
head() {
return {
title: Info.title
}
},
data() {
return {
main: {
fields,
...Info,
}
}
}
}
</script>
show user
put this code in _id.vue
:
create.vue
<template>
<show-page
:id="id"
v-model="main"
/>
</template>
<script>
import Fields from "./fields";
import Info from "./config";
export default {
head() {
return {
title: Info.title
}
},
data() {
return {
id: undefined,
main: {
data: {},
fields: Fields,
...Info
}
}
},
async asyncData({params}) {
return {id: params.id}
}
}
</script>
add to menu
add this code to your menu.js file or in the menu
array of vsd module options.
menu.js
export default {
ADMIN_DRAWER: [
// ...
title: 'team', icon: 'supervised_user_circle', items: [
{title: 'users', permission: 'user.find', link: '/admin/system/users'}
]
]