
正文
vue工程权限怎么配置?
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
vue工程权限怎么配置?
router.beforeEach((to, from, next) => { });方法的to参数能拿到router设置的对象信息,
如:
{
path: "/voteContent/pt/:meetingId",
name: "holderResult",
components: {
default: holderResult,
},
meta:{
permissions:['fvote:tp:sj']
}
}
to代表即将要访问的页面,跳转过去或者直接刷新的,就是即将显示的;
to的截图:

from代表之前的页面信息,表示即将的上一个页面的信息,包括跳转之前的,

next()代表继续。是一个函数。
如果只是对当前页面进行刷新的话,to还是当前页面的信息,from是这样的信息,

等;
import Vue from 'vue'
import VueRouter from 'vue-router'
import store from '../store/index'
import permissionValidator from '../utils/permissionValidator'
import http_error_statues from '../utils/httpPrompt'import voteRoute from './config/vote'import Err404 from '../views/error/404'
import Err403 from '../views/error/403'Vue.use(VueRouter)const routesMap = [
//404页面
{
path: '*',
components: {
default: Err404,
}
},
{
path: '/403',
components: {
default: Err403,
},
hidden: true
}
]
.concat(voteRoute);const router = new VueRouter({routes: routesMap});router.beforeEach((to, from, next) => { let redirectToLoginPage = ()=> {
window.location.href = http_error_statues.sso_url+'login?service='
+ http_error_statues.web_service_url+ http_error_statues.web_service_name
+'sso' + '&reurl=' + encodeURIComponent(window.location.href);
}
let validate = ()=> {
if(to.meta.permissions && to.meta.permissions.length > 0){
//非匿名页面
if(!store.state.user.userInfo.fullRoles
|| !store.state.user.userInfo.permissions
|| store.state.user.userInfo.permissions.length <){
//用户权限为空,说明未登录,重定向到登录页面
redirectToLoginPage();
return;
}
else{
if(permissionValidator.check(store.state.user.userInfo.permissions,
to.meta.permissions[0])){
//权限匹配
next();
}
else{
console.log('permission denied');
next({
path: '/403',
query: {redirect: to.fullPath}
})
}
}
}
else{
//匿名页面
if(!document.cookie._uname_r && (!store.state.user.userInfo.fullRoles
|| !store.state.user.userInfo.permissions
|| store.state.user.userInfo.permissions.length < 1)){
redirectToLoginPage();
}else{
next();
} }
} //需要先获取用户信息
if(!store.state.user.userInfo){
store.dispatch('GetUserInfo')
.then(validate)
.catch(err => {
console.log('fail userInfo',err);
});
}
else{
validate();
}
});export default router;
store中的user.js模块是这样:
import service from '../../utils/service';const user = {
state: {
userInfo: ''
},
mutations: {
SET_USER_INFO:(state, userInfo) => {
state.userInfo = userInfo;
}
},
actions: {
// 获取用户信息
GetUserInfo({ commit, state }) {
return new Promise((resolve, reject) => {
service.doGet({url:'currentUser'}).then(response => {
const data = response.data;
commit('SET_USER_INFO', data);
resolve(response);
}).catch(error => {
reject(error);
});
});
}
}
};export default user;
权限插件permissionValidator .js:
import shiro from 'shiro-trie'const shiroTrie = shiro.newTrie();const permissionValidator = { check: function(userFullPermissions, urlPermission) {
//eg:userFullPermissions : ['portal:common','portal:info:*','vote:issuer:*']
//eg:urlPermission: 'portal:common'
shiroTrie.reset();
userFullPermissions.forEach(function(item, index, array){
shiroTrie.add(item);
});
return shiroTrie.check(urlPermission);
}
}
export default permissionValidator
import shiro from 'shiro-trie' 来自package.json安装来的:
"shiro-trie": "^0.4.0",






