HI,下午好,欢迎来到微信公众号转让!
24小时服务热线: 4000-163-301
请扫码咨询

新闻动态

NEWS CENTER

在说权限设计前我们先来看个现实中的实例

2020-06-29

在说权限设计前我们先来看个现实中的实例,大家在电影里面应该都见过这样的场景,当一个客户想进入银行仓库查看自己的私人保险柜信息时,通常都需要经过几个步骤:

  1.  首先进入银行并说明自己是银行的客户以及来意
  2. 由业务经理带领进入对应的保险箱仓库(仓库应该不止一个,猜得啊,我也没有进去过^_^)
  3. 业务经理带着客户在众多保险箱中找到属于客户的私人保险箱
  4. 客户输入密码自己打开保险箱查看内部物品

在上面的实例中,客户在看到保险箱的物品之前,他需要有这么几个必要条件:

  1. 在银行有开户信息,能证明自己是银行客户
  2. 有进入保险箱仓库的权利
  3. 在众多的保险箱中找到属于自己的那一个
  4. 有打开保险箱的钥匙

了解了上面的过程,对于我们理解一个系统的权限就会容易很多,我们再来梳理一下用户在系统中看到数据的过程:

  1. 用户需要进入系统,这需要后台管理员给用户分配账号(后台系统是没有注册功能的)
  2. 用户进入系统能看到哪些菜单导航,需要后台给配置
  3. 通过菜单进入到具体的页面,在页面内能访问多少数据量也是有访问限制的
  4. 看到数据了,能对数据做多少操作也是有操作限制的

在上面的过程中,除了第一步的分配账号是由管理员操作的,剩下的三步都和用户所拥有的权限相关。通过具体操作对象的不同,上面三步可以分为两类:

  • 功能:对功能的限制也称功能权限,主要是对访问区域以及对应操作的管理,如上面的仓库、页面以及页面操作按钮。
  • 数据:对数据的限制也称数据权限,主要是对数据资源的访问控制,如保险箱和页面显示数据。

知道了需要对哪些对象进行管控限制,那么设计功能也就有了针对性,接下来我们一一分析。

01 功能权限

功能权限指的是用户具体能访问哪些菜单,以及对菜单页面中的哪些按钮有操作权限。把多个菜单和对应的功能按钮组织到一起就行程了一个权限列表,具体的组织方式如下图:


对于用户来说,它又是如何获得这些权限列表的呢?通常有以下几种方案:

方案一:ACL(Access control list), 权限访问列表

通过直接将用户和权限列表绑定在一起,实现的权限管理

  • 优点:可以为每个用户个性化的设置访问权限。
  • 缺点:当用户数量多,并且拥有相同职能的用户较多时,修改一次权限,就需要耗费很大力气。如销售部有很多的销售专员,因为他们的职位相同,所有获得的操作权限相同,但后期添加或者删除一个访问权限,那么需要给所有人相同职位的人都操作一遍,管理员估计得累死。所以这种设计方案在开发中使用的频率很低。

方案二:RBAC(Role-Based Access Control),基于角色的访问控制

通过先创建一个角色,然后将权限列表在绑定在这个角色上,之后再将角色和绑定到用户身上,用户就可以获得这个角色的所有权限。


  • 优点:首先多人可以公用一个角色;再者如果需要对权限进行调整,只需要调整对应角色的权限即可,也就是只需要一次操作,非常易于操作和管理。
  • 缺点:上面优点也是一个缺点,因为权限的操作是按角色来完成的,所以每次修改含有相同角色的用户都会被影响。

如对于同一职位的职员,正常来说大家的权限都是一样的,但是也会有特殊情况发生,比如给其中一个添加或减少部分权限,这个时候就没有办法了。对于这种情况,在现有的设计功能上也是有办法解决的。

通常的方案就是在给角色绑定权限时,先采用权限最小化原则,能少给就少给,然后再做一个角色绑定多余的权限,再把这个角色也绑定给职员,这个时候两个角色的权限就合并到一起了,也就是用户和角色之间是一对多的关系。