vuex根据不同的用户权限展示不同的路由列表

47次阅读

共计 996 个字符,预计需要花费 3 分钟才能阅读完成。

需求描述

最近接到一个新的需求,要求将系统的用户进行分类,用户登陆后根据不同的用户权限展示不同的功能列表。

这个功能在后台管理中很常见,大致的思路是

  1. 后台返回用户类型,前端根据用户类型生成该类用户可以访问的功能列表。
  2. 后台返回功能列表,前端进行循环渲染。

一个在前端生成功能列表,一个在后端返回,两个本质上类似,最终都是需要得到一个该用户的功能功能列表。但是两者都有一个不可忽视的东西,就是如果用户直接在地址栏输入会怎么样。

技术选型

由于公司项目不算小,为了后期维护方便,我还是选择了使用 vuex 完成上述的功能。

主要想法为在 vuex 中保存用户登陆后的状态,以及用户可访问的路由列表,这样的话,不涉及到父子组件间的数据传递,可以很方便的在单个组件中获取到用户的权限路由列表。

Vuex

如果只是想简单的使用一个 vuex, 了解 state,mutation,action 就足够你使用

在 src 文件夹下,创建一个 store 文件夹,如果项目简单,可以将 state,mutations,actions,getters 等写入到一个文件中

主要代码很简单,只需要导入 Vue,Vuex,并且调用 Vue.use(Vuex)。

结合官方解释的个人理解,一个 vuex 文件就是一个仓库,它包含着你需要共享的变量、有关的事件、以及可以执行这些事件的行为,我们把这些导出去,在单个组件中引入,我们便可以在单个组件中对共享的变量进行改变。

import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
export default new Vuex.Store({state})

state

state 主要功能是用来定义变量, 代表你需要共享的一个状态。比如,我想要共享用户可以访问的路由列表,所以,我需要先在 state 中定义一个存放路由列表的变量。

store/index.js 中

import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
const state = {pressionList: [],// 用户允许登陆的路由列表
    loginTag:false// 用户登陆状态 
}
export default new Vuex.Store({state})

单个组件中使用 state,有两种方法,直接获取,或者使用 mapState 辅助工具
login.vue

————- 待续

正文完
 0