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",
vue工程权限怎么配置?的更多相关文章
- 说下vue工程中代理配置proxy
这个代理配置不需要后台进行ngnix代理跳转了,前端可以做.在vue.config.js文件中进行配置,如下: module.exports = { publicPath: process.env.V ...
- vue实战_从头开始搭建vue工程
写在前面:vue工程入口文件分析 /index.html,/src/main.js,/src/APP.vue /index.html文件示例: <!DOCTYPE html> <ht ...
- 想在已创建的Vue工程里引入vux组件
<1>. 在项目里安装vux npm install vux --save <2>. 安装vux-loader (这个vux文档似乎没介绍,当初没安装结果报了一堆错误) npm ...
- vue工程本地代码请求http发生跨域提示错误解决方法
这个可以使用代理进行跨域,这样看来跨域的方法就有几种了,对于iframe中的用postmassage,对于vue工程中的跨域则使用代理模式. 代理模式配置如下: 在config文件夹下找到index. ...
- SVN版本库(访问权限)配置实例笔记
http://blog.csdn.net/zjianbo/article/details/8578297 SVN版本库(访问权限)配置实例笔记 本系列文章由ex_net(张建波)编写,转载请注明出处. ...
- C#微信开发-微信JS-SDK(1)之通过config接口注入权限验证配置
官方文档是微信JS-SDK的使用步骤http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html#JSSDK.E4.BD.B ...
- axios在vue中的简单配置与使用
一.axios 简介 axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,它本身具有以下特征:https://hzzly.github.io/2017/03/12/ ...
- vue工程利用pubsub-js实现兄弟组件之间的通信
前言 项目是基于vue-cli创建的,不会搭建vue开发环境的同学可以百度,这里不再赘述. 步骤流程 vue项目搭建完成之后的文件图如下: 我的上一篇博客已经详细叙述vue工程中各个文件的作用,不清楚 ...
- Vue基础(环境配置、内部指令、全局API、选项、内置组件)
1.环境配置 安装VsCode 安装包管理工具:直接下载 NodeJS 进行安装即可,NodeJS自带 Npm 包管理工具,下载地址:https://nodejs.org/en/download/安装 ...
随机推荐
- gomobile build
You need to set the NDK path in gomobile init using the -ndk flag - if you follow these instructions ...
- Linux系统下修改MySQL密码(忘记密码)
忘记原来的myql的root的密码: 首先,你必须要有操作系统的root权限了.要是连系统的root权限都没有的话,先考虑root系统再走下面的步骤.类似于安全模式登录系统,有人建议说是pkill m ...
- ChemDraw使用不了怎么办
ChemDraw作为一款专业级的化学绘图软件,不仅可以帮助用户绘制图像在数据计算方面也起了很大作用,因此,ChemDraw非常受用户的欢迎.但是我们在使用过程中难免会遇到各种问题,特别是对于新手用户, ...
- 1QT在线帮助文档
http://www.kuqin.com/qtdocument/classes.html
- Hibernate_day01--解决配置文件没有提示问题_演示常见错误
解决配置文件没有提示问题 1 可以上网 2 把约束文件引入到eclipse中 (1)在配置文件中复制一句话 重启eclipse开发工具 演示常见错误 1 在映射配置文件中,把name属性值写错了,和实 ...
- String、StringBuffer与StringBuilder区别
1.三者在执行速度方面的比较:StringBuilder > StringBuffer > String 2.String <(StringBuffer,StringBuild ...
- cocos2dx游戏--三国关羽传【角色扮演类】Demo的制作及实现
项目地址:https://github.com/moonlightpoet/GuanYuZhuan 主要类及其对应效果: MainScene:菜单界面(用于选择不同剧本) StoryScene:故事界 ...
- nginx简单的nginx.conf配置
nginx.conf配置如下: #user nobody;worker_processes 1; #error_log logs/error.log;#error_log logs/error.log ...
- axios post传参后台无法接收问题
起因是在angular项目中使用axios发送post请求,向后台传参后台一直无法接收,网上查了有说是请求头设置不对,需要把Content-Type:application/x-www-form-ur ...
- 学习ASP.NET MVC3(6)----- Filte
前言 在开发大项目的时候总会有相关的AOP面向切面编程的组件,而MVC(特指:Asp.Net MVC,以下皆同)项目中不想让MVC开发人员去关心和写类似身份验证,日志,异常,行为截取等这部分重复的代码 ...