今天我们来谈谈权限设计。
相信做过项目的同学都接触过基于角色的权限设计。但是,大多数人对设计背后的 RBAC 模型(Role-based Access Control)不是很熟悉。
在信息安全领域,RBAC是一种应用广泛的安全访问控制机制。它不同于强制访问控制或任意访问控制(即直接赋予访问权限),而是通过为角色分配权限等间接机制实现控制。以其灵活性和多功能性而闻名。由于该机制是 Sandhu、Coyne、Feinstein 和 Youman 在 1996 年在前人相关理论的基础上提出的基于角色的访问控制模型,因此也称为 RBAC96。
在RBAC模型中,操作认证过程被概括为判断一个逻辑表达式如[Who accesses What to What]的值是否为True的求解过程。因此UI界面,权限确定问题转化为三元组(Who, What, How)。
RBAC模型根据复杂程度进一步分为0-3级。RBAC0被定义为基础模型,其中定义了用户(Users)、角色(roles)、权限(Permissons)和会话(Sessions)。RBAC1 包含 RBAC0 并允许继承角色以提供角色层次结构。RBAC2 包含 RBAC0,并添加了约束。约束指定了在将权限分配给角色或将角色分配给用户以及用户在某些时候激活角色时应遵循的强制性规则。
约束进一步分为静态(SSD)和动态(DSD)。
SSD 用于用户和角色之间,包括以下内容:
不同角色之间的互斥关系
基数关系,即用户的角色数量有限,角色的权限数量有限
先决条件约束rbac角色权限表设计,即用户必须具备角色的先决条件。例如,他必须拥有角色 A 才能授权角色 B。
会话和角色之间使用DSD动态判断角色是否启用rbac角色权限表设计,例如用户拥有的角色在当前会话中是否有效。
RBAC3 包含 RBAC1 和 RBAC2。
详情见下图
RBAC模型满足以下原则:
最低权限:角色只有执行其需要执行的操作所需的最低权限。用户可以根据不同的角色获得必要的权限。
职责分离:可以提供约束以确保为敏感流程分配互斥角色,例如表单填写者和审阅者不应是同一用户。
数据抽象:通过对权限的高级抽象来实现。使用角色从业务概念层面聚合相关权限和抽象权限氛围,而不是直接在系统层面提供读写权限。
以上是对RBAC模型的简单介绍,后续会讲解如何在实际项目中应用。