用户权限设计
概要
权限管理几乎是每个系统或者服务都会直接或者间接涉及的部分. 权限管理保障了资源(大部分时候就是数据)的安全, 权限管理一般都是和业务强关联, 每当有新的业务或者业务变化时, 不能将精力完全放在业务实现上, 权限的调整往往耗费大量的精力.
其实, 权限的本质没有那么复杂, 只是对访问的控制而已, 有一套完善的访问控制接口, 再加上简单的权限模型. 权限模型之所以能够简单, 就是因为权限管理本身并不复杂, 只是在和具体业务结合时, 出现了各种各样的访问控制场景, 才显得复杂.
PERM 模型
PERM(Policy, Effect, Request, Matchers)模型很简单, 但是反映了权限的本质 – 访问控制
Policy: 定义权限的规则
Effect: 定义组合了多个 Policy 之后的结果, allow/deny
Request: 访问请求, 也就是谁想操作什么
Matcher: 判断 Request 是否满足 Policy
Model
支持的Models
casbin 语法
函数
基于角色的访问控制
域内RBAC
Casbin RBAC v.s. RBAC96
ABAC
优先级模型
术语表
- ACL: Access Control List 规模增加导致管理员重复且繁杂
特色:直接将用户与权限进行一一对应
缺点:新增用户权限需要重新设定,非常麻烦,在资源类别少的时候,可以忍受,同事和资源类别增加后,管理员的工作就会非常痛苦 - RBAC: Role Based Access Control
特色:ACL 模型进行拓展后得来的,引入资源组以及角色组,让管理员可以更方便地管理权限
缺点:细粒度不够 - ABAC: Attribute Based Access Control
特色: 非常强大的模型,它允许你完成非常细化的权限需求,它所有的权限都是依赖于用户、角色、行为、资源甚至环境的属性。
缺点: 与 ACL 有点类似:非常繁琐,而且非常依赖于规则引擎,而这种引擎无法独立于系统,即需要与系统耦合在一起 - PERM: 全称 Policy Effect Request Matchers
引用连接
casbin 中文官方文档教程
系统权限的设计
k8s 权限设计
pycasbin
casbin 编辑器
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Jacker-zzk's Blog!