vue后台管理页面权限管理

一般后台管理页面会有不同的权限,每个角色拥有不同的查看页面的权限

权限实现:用户信息中携带权限页面标识

先用账号密码获取到token,token获取用户信息,用户信息中包含了网页需要的内容,一般有姓名、身份、手机号、邮箱,现在多了一个权限页面的数组

首先设置路由守卫,跳转页面的时候,首先判断是否有token(身份信息),有token还要判断是否有用户信息,没有就调用函数去获取。

router.beforeEach((to, from, next) => {
      
    if (getToken()) {
        // console.log('store.getters.user', typeof store.getters.user)
        if (store.getters.user === null || typeof store.getters.user.permissionList === 'undefined') {
            // 没有用户信息,获取用户信息
            store.dispatch('getUserInfo').then(res => {
                let PERMISSIONLIST = store.getters.user.permissionList;
                white_code_list.forEach(ele => {
                    PERMISSIONLIST.push(ele);
                });
                let hasPermission = PERMISSIONLIST.includes(to.name);
                
                if (hasPermission) {
                    next();
                } else {
                    next({
                        name: 'error_401',
                        meta: {
                            title: '你还没有查看该页面的权限'
                        }
                    });
                }
            });
        } else {
            // 有用户信息
            let PERMISSIONLIST = store.getters.user.permissionList;
            white_code_list.forEach(ele => {
                PERMISSIONLIST.push(ele);
            });
            let hasPermission = PERMISSIONLIST.includes(to.name);

            if (hasPermission) {
                next();
            } else {
                next({
                    name: 'error_401',
                    meta: {
                        title: '你还没有查看该页面的权限'
                    }
                });
            }
        }
    } else {
        if (white_list.indexOf(to.path) !== -1) {
            // 在免登录白名单,直接进入
            next();
        } else {
			router.push({
				name: 'login',
				query: {
					returnName: to.name
				}
			});
        }
    }
})

将权限数组保存到store中,接下需要通过该数组来设置我们的导航栏列表,也就是页面路由,将权限数组中的页面设置为可见,这样不同的角色登录将会展现不同的页面导航。

 

export const getMenuByRouter = (list, access) => {
  let res = []
  forEach(list, item => {
    if (!item.meta || (item.meta && !item.meta.hideInMenu)) {
      let obj = {
        icon: (item.meta && item.meta.icon) || '',
        name: item.name,
        meta: item.meta
      }
      if ((hasChild(item) || (item.meta && item.meta.showAlways)) && showThisMenuEle(item, access)) {
        obj.children = getMenuByRouter(item.children, access)
      }
      if (item.meta && item.meta.href) obj.href = item.meta.href
      if (showThisMenuEle(item, access)) res.push(obj)
    }
  })
  return res
}

const showThisMenuEle = (item, access) => {
  for(var i=0;i<access.length;i++){
	  if(access[i]==item.name){
		  return true
	  }
  }
}

上面只是设置了隐藏,路由守卫作用是为了一些用户通过网址直接进入到没有权限的页面中

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值