如何优雅地在vue中添加权限控制示例详解

  


  

  

在一个项目中,一些功能会涉及到重要的数据管理,为了确保数据的安全,我们会在项目中加入权限来限制每个用户的操作,作为前端,我们要做的是配合后端给到的权限数据,做页面上的各种各样的限制。
  

  


  

  

因为这是一个工作上的业务需求,所以对于我来说主要有两个地方需要进行权限控制。
  

  

第一个是侧边菜单栏,需要控制显示与隐藏。
  

  

第二个就是页面内的各个按钮,弹窗等。
  

  

  

1,如何获取用户权限?
  

  

后端(当前用户拥有的权限列表)→前端(通过后端的接口获取到,下文中我们把当前用户的权限列表叫做permissionList)

  

2,前端如何做限制?
  

  

通过产品的需求,在项目中进行权限点的配置,然后通过permissionList寻找是否有配置的权限点,有就显示,没有就不显示。

  

3,然后呢?
  

  

没了。   

当我刚开始接到这个需求的时候就是这么想的,这有什么难的,不就获取permissionList然后判断就可以了嘛。后来我才发现真正的需求远比我想象的复杂。
  

  


  

  

上面的需求有提到我们主要解决两个问题,侧边菜单栏的显示,页面内操作。
  

  

假设我们有这样一个路由的设置(以下只是一个例子):
  

        从“vue-router”进口VueRouter/*注意:以下配置仅为部分配置,并且省去了组件的配置*/出口const路线=[   {   路径:“/?   名称:“管理”,   标签:“首页”   },   {   路径:/用户,   名称:“用户”,   标签:“用户”,   重定向:{名称:“UserList”},   孩子:(   {   路径:“列表”,   名称:“UserList”,   标签:“用户列表”   },   {   路径:“集团”,   名称:“UserGroup”,   标签:“用户组”,   重定向:{名称:“UserGroupList”},   孩子:(   {   路径:“列表”,   名称:“UserGroupList”,   标签:“用户组列表”   },   {   路径:“配置”,   名称:“UserGroupConfig”,   标签:“用户组设置的   }   ]   }   ]   },   {   路径:“/设置”,   名称:“设置”,   标签:“系统设置的   },   {   路径:/登录,   名称:“登录”,   标签:“登录的   }   ]      const路由器=new VueRouter ({   路线   })      出口的默认路由器      

其中前两级路由会显示在侧边栏中,第三级就不会显示在侧边栏中了。
  

  

页面内操作的权限设置不需要考虑很多其他东西,我们主要针对侧边栏以及路由进行问题的分析,通过分析,主要有以下几个问题:

  
      <李>什么时候获取permissionList,如何存储permissionList李   <李>子路由全都没权限时不应该显示本身(例:当用户列表和用户组都没有权限时,用户也不应该显示在侧边栏)   <李>默认重定向的路由没有权限时,应寻找孩子中有权限的一项重定向(例:用户路由重定向到用户列表路由,若用户列表没有权限,则应该重定向到用户组路由)   <李>当用户直接输入没有权限的url时需要跳转到没有权限的页面或其他操作。(路由限制)   
  

下面我们针对以上问题一个一个解决。
  

  

<强>什么时候获取权限,存储在哪,路由限制
  

  

我这里是在路由器的beforeEach中获取的,获取的permissionList是存放在vuex中。
  

  

原因是考虑到要做路由的限制,以及方便后面项目中对权限列表的使用,以下是实现的示例:
  

  

首先我们加入权限配置到路由器上:
  

     //以下只展示部分配置   {   路径:/用户,   名称:“用户”,   标签:“用户”,   元:{   权限(“U_1”):   },   重定向:{名称:“UserList”},   孩子:(   {   路径:“列表”,   名称:“UserList”,   标签:“用户列表”,   元:{   权限(“U_1_1”):   }   },   {   路径:“集团”,   名称:“UserGroup”,   标签:“用户组”,   元:{   权限(“U_1_2”):   },   重定向:{名称:“UserGroupList”},   孩子:(   {   路径:“列表”,   名称:“UserGroupList”,   标签:“用户组列表”,   元:{   权限(“U_1_2_1”):   }   },   {   路径:“配置”,   名称:“UserGroupConfig”,   标签:“用户组设置”,   元:{   权限(“U_1_2_2”):   }   }   ]   }   ]   }

如何优雅地在vue中添加权限控制示例详解