// get user info// note: roles must be a object array! such as: ['admin'] or ,['developer','editor']const{ roles }=await store.dispatch('user/getInfo')// generate accessible routes map based on rolesconst accessRoutes =await store.dispatch('permission/generateRoutes', roles)// dynamically add accessible routes
router.addRoutes(accessRoutes)
{
path:"/permission",
component: Layout,
redirect:"/permission/page",
alwaysShow:true,// will always show the root menu
name:"Permission",
meta:{
title:"Permission",
icon:"lock",
roles:["admin","editor"]// you can set roles in root nav},
<template><!-- Admin can see this --><el-tagv-permission="['admin']">admin</el-tag><!-- Editor can see this --><el-tagv-permission="['editor']">editor</el-tag><!-- Editor can see this --><el-tagv-permission="['admin','editor']">Both admin or editor can see this</el-tag></template><script>// 当然你也可以为了方便使用,将它注册到全局import permission from'@/directive/permission/index.js'// 权限判断指令exportdefault{
directives:{ permission }}</script>
实际就是通过getter拿role判断权限。没权限找el的父亲删掉它。
也可以使用权限判断函数+ vif判断,这种好理解点:
<template><el-tab-pane v-if="checkPermission(['admin'])" label="Admin">Admin can see this</el-tab-pane><el-tab-pane v-if="checkPermission(['editor'])" label="Editor">Editor can see this</el-tab-pane><el-tab-pane v-if="checkPermission(['admin','editor'])" label="Admin-OR-Editor">Both admin or editor can see this</el-tab-pane></template><script>import checkPermission from'@/utils/permission'// 权限判断函数exportdefault{
methods:{
checkPermission
}}</script>
请求
在utils的request里做了封装:
service.interceptors.request.use(
config =>{// do something before request is sentif(store.getters.token){// let each request carry token// ['X-Token'] is a custom headers key// please modify it according to the actual situation
config.headers['X-Token']=getToken()}return config
},
error =>{// do something with request error
console.log(error)// for debugreturn Promise.reject(error)})// response interceptor
service.interceptors.response.use(/**
* If you want to get http information such as headers or status
* Please return response => response
*//**
* Determine the request status by custom code
* Here is just an example
* You can also judge the status by HTTP Status Code
*/
response =>{const res = response.data
// if the custom code is not 20000, it is judged as an error.if(res.code !==20000){Message({
message: res.message ||'Error',
type:'error',
duration:5*1000})// 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;if(res.code ===50008|| res.code ===50012|| res.code ===50014){// to re-login
MessageBox.confirm('You have been logged out, you can cancel to stay on this page, or log in again','Confirm logout',{
confirmButtonText:'Re-Login',
cancelButtonText:'Cancel',
type:'warning'}).then(()=>{
store.dispatch('user/resetToken').then(()=>{
location.reload()})})}return Promise.reject(newError(res.message ||'Error'))}else{return res
}},
error =>{
console.log('err'+ error)// for debugMessage({
message: error.message,
type:'error',
duration:5*1000})return Promise.reject(error)})
它是会在请求头上带上X-token,当然这个根据实际情况写。
后面的响应也是根据自己实际来。
gettoken是在cookie中拿的:
import Cookies from'js-cookie'const TokenKey ='Admin-Token'exportfunctiongetToken(){return Cookies.get(TokenKey)}exportfunctionsetToken(token){return Cookies.set(TokenKey, token)}exportfunctionremoveToken(){return Cookies.remove(TokenKey)}
前言最近被逼去搞vue了,这玩意早忘光了,看了下是要搞个类似后台管理项目,看看vue-elemnt-admin学学。它还有个简易版vue-element-template,看了下缺的东西蛮多,权限路由也没写判断。Mockvue-element-admin里的mock是nodejs整的服务,甩到了dev-server里。需要关闭就把before: require('./mock/mock-server.js')这玩意给注释了就行。如果调用是mock接口,那么启动控制台会显示invoke xx