diff --git a/src/api/role.js b/src/api/role.js index 4e733e83..6c60383a 100644 --- a/src/api/role.js +++ b/src/api/role.js @@ -1,5 +1,12 @@ import request from '@/utils/request' +export function getRoutes() { + return request({ + url: '/routes', + method: 'get' + }) +} + export function getRoles() { return request({ url: '/roles', diff --git a/src/api/routes.js b/src/api/routes.js deleted file mode 100644 index 95fc96c9..00000000 --- a/src/api/routes.js +++ /dev/null @@ -1,8 +0,0 @@ -import request from '@/utils/request' - -export function fetchAsyncRoutes() { - return request({ - url: '/routes', - method: 'get' - }) -} diff --git a/src/mock/index.js b/src/mock/index.js index ab4f5cc2..f22c762f 100644 --- a/src/mock/index.js +++ b/src/mock/index.js @@ -25,6 +25,7 @@ Mock.mock(/\/login\/logout/, 'post', loginAPI.logout) Mock.mock(/\/user\/info\.*/, 'get', loginAPI.getUserInfo) // 角色相关 +Mock.mock(/\/routes/, 'get', roleAPI.getRoutes) Mock.mock(/\/roles/, 'get', roleAPI.getRoles) Mock.mock(/\/roles$/, 'post', roleAPI.addRole) Mock.mock(/\/roles\/[A-Za-z0-9]+/, 'put', roleAPI.updateRole) diff --git a/src/mock/role.js b/src/mock/role.js index 1fdf3ad9..2e868dc1 100644 --- a/src/mock/role.js +++ b/src/mock/role.js @@ -1,9 +1,45 @@ import Mock from 'mockjs' +import { deepClone } from '@/utils' +import { filterAsyncRoutes } from '@/store/modules/permission' +import { asyncRoutes, constantRoutes } from '@/router' -// admin 角色可以访问所有菜单 -const roles = [] +const routes = deepClone([...constantRoutes, ...asyncRoutes]) + +const roles = [ + { + key: 'admin', + name: 'admin', + description: 'Super Administrator. Have access to view all pages.', + routes: routes + }, + { + key: 'editor', + name: 'editor', + description: 'Normal Editor. Can see all pages except permission page', + routes: filterAsyncRoutes(routes, ['editor']) + }, + { + key: 'visitor', + name: 'visitor', + description: 'Just a visitor. Can only see the home page and the document page', + routes: [{ + path: '', + redirect: 'dashboard', + children: [ + { + path: 'dashboard', + name: 'Dashboard', + meta: { title: 'dashboard', icon: 'dashboard' } + } + ] + }] + } +] export default { + getRoutes() { + return routes + }, getRoles() { return roles }, diff --git a/src/router/index.js b/src/router/index.js index 7c49ed06..d3d10b12 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -80,7 +80,6 @@ export const constantRoutes = [ { path: '/documentation', component: Layout, - redirect: '/documentation/index', children: [ { path: 'index', @@ -140,6 +139,15 @@ export const asyncRoutes = [ title: 'directivePermission' // if do not set roles, means: this page does not require permission } + }, + { + path: 'role', + component: () => import('@/views/permission/role'), + name: 'RolePermission', + meta: { + title: 'rolePermission', + roles: ['admin'] + } } ] }, diff --git a/src/store/modules/permission.js b/src/store/modules/permission.js index c05e4522..fba03bc3 100644 --- a/src/store/modules/permission.js +++ b/src/store/modules/permission.js @@ -18,7 +18,7 @@ function hasPermission(roles, route) { * @param routes asyncRoutes * @param roles */ -function filterAsyncRoutes(routes, roles) { +export function filterAsyncRoutes(routes, roles) { const res = [] routes.forEach(route => { diff --git a/src/views/permission/role.vue b/src/views/permission/role.vue index d2617bad..df7e5073 100644 --- a/src/views/permission/role.vue +++ b/src/views/permission/role.vue @@ -1,18 +1,18 @@