美文网首页
RBAC权限设计思想

RBAC权限设计思想

作者: 沃德麻鸭 | 来源:发表于2021-09-02 08:41 被阅读0次

认识RBAC

为了达成不同的帐号登陆系统后能看到不同的页面,能执行不同的功能的目标,我们有很多种解决方案,RBAC(Role-Based Access control)权限模型 ,也就是基于角色的权限分配解决方案。

其权限模式如下:

权限模式

 三个关键点:

用户:使用系统的人

权限点:这个系统有多少个功能

角色:不同的权限点的集合

通过给用户分配角色,给角色分配权限点,来给用户添加功能,而且系统中的权限点不可以随意添加


 菜单级别权限控制

因为不同用户控制的路由页面可能也会有所不同,这时就不能直接使用路由组件中配置的动态路由和静态路由组合,因为这样的话,每个人登录显示的都是全部页面

①在permission.js路由守卫中(路由跳转时)的有token没有用户信息时,调用route.addRouters()

addRouters动态添加路由

这里使用到路由的addRouters方法,这里需要注意的是,侧边栏的菜单目录不能访问到由addRouters添加的动态路由。

②解决sidebar组件不能访问到addRouters方法获取的路由(生成左侧菜单栏)

将动态路由信息存储到vuex中,也就是需要创建一个新的vuex模块(这里叫menus.js)

store/moudules/menus.js

修改访问路径为从store/moudules/menus.js中

sideBar/index.vue

 注意:这里的获取使用只决定了侧边菜单栏的路由显示,渲染菜单的数据改为从vuex中获取 ,路径访问页面依然是由router/index.js决定

③此时的显示还是全部,所以需要将直接从router/index.js中取得的动态路由进行筛选

(permise.js)筛选代码

  const menus = store.state.user.userProfileInfo.roles.menus

        const filterRoutes = asyncRoutes.filter(route => {

          const routeName = route.children[0].name

          return menus.includes(routeName)

        })

 获取到当前用户的真正权限信息之后,在所有动态路由中进行筛选

④store/moudules/menus.js中动态路由的值在路由守卫中获取用户信息时赋值

(permise.js)保存到vuex中

总结:permise.js通过筛选动态路由(除了静态路由以外的路由),将最终筛选的结果给addRoutes用作参数,并且存储到菜单的Vuex中,供sideBar进行使用渲染菜单栏。

最终框架

按钮级别权限控制

思路

用户登陆成功后,用户可以访问的按钮级别权限保存在points数组中。而这个数据我们是保存在vuex中的,所以,就可以在项目的任意地方来中访问。

如果某个按钮上的标识在points出现,则可以显示出来

这里就需要定义一个自定义指令,用来控制按钮级别权限的显示与否

自定义指令回顾

自定义指令

main.js中,定义全局指令binding.value绑定了用户在结构上写的标识,判断在获取到的用户角色权限,结构上给定的标识是不是包含在其中,而获取的用户权限点是在vuex的user.js,state.user.userinfo.roles.points中保存。

全局注册自定义指令

// 注册一个全局自定义指令 `v-allow`

Vue.directive('allow', {

  inserted: function(el, binding) {

    // 从vuex中取出points,

    const points = store.state.user.userInfo.roles.points

    // 如果points有binding.value则显示

    if (points.includes(binding.value)) {

      // console.log('判断这个元素是否会显示', el, binding.value)

    } else {

      el.parentNode.removeChild(el)

      // el.style.display = 'none'

    }

  }

})

这里的:'import_employee'是从标识符来的

规定标识

相关文章

网友评论

      本文标题:RBAC权限设计思想

      本文链接:https://www.haomeiwen.com/subject/uqtoiltx.html