任何系统/产品搭建时,最先考虑的都应该是权限管理模块,而且权限管理模块的清晰、稳定是平台产品健康发展的基石,权限管理核心考虑的问题是用户与权限的关系。本文作者对三种不同权限管理的版本展开了梳理分析,与大家分享。
用户直接与权限映射,这种设计的优势在于简洁直观,适合用户数量不多,功能较为简单的系统,它的劣势也是非常的明显当用户量增多时,维护成本较高,可扩展性差。
系统页面Demo:
若系统用户和功能增多,为每一个用户匹配单独的权限,会变得非常的繁琐,因此权限分门别类,形成“权限包”。从用户的角度,将用户分类,同一类用户固定为相同的角色,赋予相同的权限,会让操作变得简单很多。
系统页面Demo:
对于管理性后台,往往人员是职级区分的,比如用户王五为销售组长,其组员赵六和孙七,王五需要看到赵六和孙七的销售额数据和可以进行赵六和孙七的所有操作,而赵六仅能看到自己的销售额数据,进行和自己相关的操作。
这个事例中引入了两个新的概念,一是用户的权限可以细分为功能权限和数据范围权限,二是数据范围和功能权限都有了继承的层级概念。
所谓功能权限大家比较好理解,比如能否看到某个页面,能否点击某个按钮。而数据权限略抽象些,比如在业绩报表模块,从功能权限角度,可以决定用户能否打开这个报表页面,但是不同用户进来看到不同的数据(王五需要看到赵六和孙七的销售额数据,而赵六仅能看到自己的销售额数据,看不到孙七的),则是由数据范围来控制的。
我们可以将用户进行分级管理,比如建立多层级的组织架构树,将不同用户放置于组织架构的不同根节点上,来实现多层级用户的建立和管理。
1)如果用户的层级如果比较简单(不多于三级),可以将层级关系融入到角色之中。比如用户分为三级:管理员-组长-组员,管理员能看到全部的数据范围和拥有全部的功能权限,而组长能查看组员的数据范围和拥有部分功能权限(比如无法编辑用户),而组员的数据范围仅仅为自己负责的数据和拥有部分功能权限。
我们可以在组长这个角色下,允许其绑定组员,针对不同的角色设置不同的数据范围读取方式,管理员可以读取全部数据范围,组长需要读取其组员的,组员只能读取自己的。大家有兴趣可以去了解下RBAC0/1模型
2)而对于用户层级较多的情况,建议采用多层级的组织架构的管理模式,先建立公司的组织部门,再将人置于组织架构树的不同节点之下。以用户在组织节点的位置,以及是否为某个节点组织的负责人,来确定其数据范围。
一般是将角色进行分级,有了所谓的角色树的概念
由此,我们就得到了自由度更高但是逻辑更复杂的权限管理
涉及到组织架构树和角色树,需要考虑到的场景更多,这些细节要根据实际的业务场景来制定方案。比如:
实体关系图 :
系统页面Demo:
上述分析的三种权限管理其实并无优劣之分。权限管理作为系统的基石,应依据系统目标用户特点、后续发展方向、维护成本等方面进行综合评估,找到最适合系统的模式即可。
Copyright ©2015~2025 www.kingtall.com 网站ICP备案号:粤ICP备14001765号-1