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工程权限怎么配置?的更多相关文章

  1. 说下vue工程中代理配置proxy

    这个代理配置不需要后台进行ngnix代理跳转了,前端可以做.在vue.config.js文件中进行配置,如下: module.exports = { publicPath: process.env.V ...

  2. vue实战_从头开始搭建vue工程

    写在前面:vue工程入口文件分析 /index.html,/src/main.js,/src/APP.vue /index.html文件示例: <!DOCTYPE html> <ht ...

  3. 想在已创建的Vue工程里引入vux组件

    <1>. 在项目里安装vux npm install vux --save <2>. 安装vux-loader (这个vux文档似乎没介绍,当初没安装结果报了一堆错误) npm ...

  4. vue工程本地代码请求http发生跨域提示错误解决方法

    这个可以使用代理进行跨域,这样看来跨域的方法就有几种了,对于iframe中的用postmassage,对于vue工程中的跨域则使用代理模式. 代理模式配置如下: 在config文件夹下找到index. ...

  5. SVN版本库(访问权限)配置实例笔记

    http://blog.csdn.net/zjianbo/article/details/8578297 SVN版本库(访问权限)配置实例笔记 本系列文章由ex_net(张建波)编写,转载请注明出处. ...

  6. C#微信开发-微信JS-SDK(1)之通过config接口注入权限验证配置

    官方文档是微信JS-SDK的使用步骤http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html#JSSDK.E4.BD.B ...

  7. axios在vue中的简单配置与使用

    一.axios 简介 axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,它本身具有以下特征:https://hzzly.github.io/2017/03/12/ ...

  8. vue工程利用pubsub-js实现兄弟组件之间的通信

    前言 项目是基于vue-cli创建的,不会搭建vue开发环境的同学可以百度,这里不再赘述. 步骤流程 vue项目搭建完成之后的文件图如下: 我的上一篇博客已经详细叙述vue工程中各个文件的作用,不清楚 ...

  9. Vue基础(环境配置、内部指令、全局API、选项、内置组件)

    1.环境配置 安装VsCode 安装包管理工具:直接下载 NodeJS 进行安装即可,NodeJS自带 Npm 包管理工具,下载地址:https://nodejs.org/en/download/安装 ...

随机推荐

  1. MyBitis(iBitis)系列随笔之三:简单实现CRUD

    Mybitis(iBitis)实现对对象增删改查操作要借助<select/>查询,<insert/>增加,<update/>更新,<delete/>删除 ...

  2. 表达式树在LINQ动态查询

    动态构建表达式树,最佳实践版,很实用! public class FilterCollection : Collection<IList<Filter>> { public F ...

  3. ionic跳转(二)

    1)网上说要想在js里跳转用,$state.go()方法,但找了大半天都没找到在ionic使用$state的方法 2)要想用js跳转,直接用原生js跳转也是可以的 location.href='#ho ...

  4. 面试题思考:web中关于一些容器基本概念的简单总结

    关键字:应用服务器.web服务器.web容器.jsp容器.servlet容器. 1.应用服务器: 作为应用程序服务器,要求可以通过各种协议(包括 HTTP 协议)把商业逻辑暴露给(expose)客户端 ...

  5. selenium的常用方法

    1.常用定位方法 find_element_by_id()find_element_by_name()find_element_by_class_name()find_element_by_tag_n ...

  6. 【黑金原创教程】【TimeQuest】【第五章】网表质量与外部模型

    声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/al ...

  7. LeetCode 笔记系列11 First Missing Positive [为什么我们需要insight]

    题目: Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2 ...

  8. JsBridge的异步不执行的处理--promise异步变同步

    Hybird App:H5内嵌APP,前端用vue,APP之间的交互处理,适配安卓ios, 为了降低开发成本,减少前端适配工作量,三端统一使用  WebViewJavascriptBridge 在进行 ...

  9. 树形结构数据存储方案的选择和java list转tree

    树形结构数据存储方案 Adjacency List:每一条记录存parent_idPath Enumerations:每一条记录存整个tree path经过的node枚举Nested Sets:每一条 ...

  10. 04.Curator Leader选举

        在分布式计算中,leader election是很重要的一个功能,这个选举过程是这样子的:指派一个进程作为组织者,将任务分发给各节点.在任务开始前,哪个节点都不知道谁是leader或者coor ...