权限管理模型
常用的有ACL,RBAC,ABAC
ACL权限模型
ACL访问控制列表(Access Control List),通过直接给用户授予或取消权限来进行权限管理,表结构一般为用户表,用户权限表,权限表,用户和权限是多对多关系,表结构相对简单.
RBAC权限模型
RBAC是基于角色的访问控制(Role-Based Access Control).基础组成部分包括:用户,角色和权限.用户通和角色是多对多关系,角色和权限也是多对多关系.一般有5张表:user用户表,用户角色表(用户id和角色id映射关系),角色表,角色权限表(角色id和权限id映射关系),权限表
ABAC权限模型
ABAC是基于属性的访问控制(Attribute Based Access Control),通过对属性(包括用户属性,环境属性,操作属性,资源属性等)进行标识,来判断权限.即访问判定是基于某实体具有的属性.比如某权限只对18到60岁的用户开放,增加一个权限配置表配置18和60,然后对用户新增age属性并在访问时判断年龄.
对比
ACL
优点
较为灵活:可以对单个用户或资源设置细粒度的权限,能精确控制
适用于简单场景:对于小规模系统是非常简单有效的
易理解:可以直观的看到每个用户的权限,比较直观.
缺点:
不适用复杂场景:在大规模系统中,随着用户,资源的增加,ACL条目会大幅度增加
缺乏策略一致性:随着系统复杂,很难确保ACL策略在整个系统中一致
安全性问题:误配置影响范围广,容易导致权限大范围泄露或滥用
RBAC
优点:
易扩展:在修改用户权限时,可以通过修改用户的角色,批量变化用户权限
策略一致性:通过角色来关联权限,可以更一致的控制访问权限
缺点:
角色爆炸:在过于复杂的大规模系统中,角色数量可能过多,导致权限管理复杂
处理动态场景麻烦:如给某用户临时在某段时间给予某些权限
某些场景不灵活:想单独给用增加某条权限时,还需新增角色
ABAC
优点:
灵活性高:可以使用多个属性进行访问控制决策,具有高可配置性和高扩展性,从而允许更为复杂的控制逻辑.
动态性:基于属性可以在访问时考虑上下文,时间,地点等来动态的决策
适应复杂场景:在大规模系统时能基于其灵活和动态来更好的管理权限
缺点:
复杂性高:由于其灵活性,在其策略配置设计,设置和维护中会相对复杂
性能开销较大:动态决策可能会 带来更多的性能开销
总结
选择权限管理模型方案需要根据具体的系统需求和场景,它们有各自的优缺点,只是两权相难取其轻,具体开发过程中还需要权衡开发成本而选择.对于小规模和简单的系统ACL可能时完全足够胜任的;对于规模相对较大且权限相对稳定的系统,可能RBAC更好;对于需求更灵活,动态管理权限的系统,ABAC可能更适合