基于角色的访问控制 (RBAC) (Role-based access control)
基于角色的访问控制 (RBAC) 是一种根据用户角色分配权限的方法。你可以在以下场景中考虑使用 RBAC:
- 你有多个具有不同访问需求的用户:当用户需要根据角色(如管理员、编辑者或查看者)拥有不同权限时,RBAC 非常理想。
- 你需要简化权限管理:通过分配角色而不是单独设置权限,可以高效地管理大量用户。
- 你的应用服务于不同部门或团队:当不同群体需要对资源有不同访问级别时,RBAC 非常有用。
理解基于角色的访问控制 (RBAC) 的工作原理
权限 (Scopes)
权限 (Permission) 指的是访问 API 资源 的授权 (Authorization)。在现实世界中,订单、产品和文档等实体可以被指定为资源,并可以分配各种操作。
权限 (Permissions) 的示例,包括编辑订单、读取文档和删除产品的能力,如下:
write:orders
read:documents
delete:products

上图展示了资源 https://api-1.store.io
中的权限 (Permission) read:item
与资源 https://api-2.store.io
中的权限 (Permission) read:item
是不同的。
如果没有提供 API 资源,权限 (Permission) 将被视为“用于 OIDC”。通常这不是你在 RBAC 中想要的。
了解如何在 Logto 中配置 API 权限 (Permissions)。
角色 (Roles)
角色 (Roles) 是 权限 (Permissions) 的分组,可以分配给用户。它还提供了一种聚合为不同 API 定义的权限 (Permissions) 的方式,使得添加、移除或调整权限 (Permissions) 比单独分配给用户更高效。
以下是一个 order_admin
角色 (Role) 的示例,它为两个资源分配了多个权限 (Permissions):

角色 (Roles) 之间有权限 (Permissions) 重叠是可以的。
了解如何在 Logto 中配置角色 (Roles)。
示例:一个在线书店
假设你要管理一个在线书店。这里我们极大地简化了访问控制模型以便演示。
该模型分为两个主要的 API 资源:订单和产品。它们有如下不同的资源指示器 (Resource indicators):
- 订单:
https://api.store.io/orders
- 产品:
https://api.store.io/products
对于每个资源,你希望将权限 (Permissions) 分为读取、写入和删除。因此你总共定义了六个权限 (Permissions):
https://api.store.io/orders
- 权限 (Permission)
read:order
- 权限 (Permission)
write:order
- 权限 (Permission)
delete:order
- 权限 (Permission)
https://api.store.io/products
- 权限 (Permission)
read:product
- 权限 (Permission)
write:product
- 权限 (Permission)
delete:product
- 权限 (Permission)
以下是该模型的示意图:

你希望有两类管理员,订单管理员和产品管理员:
- 订单管理员 可以管理订单并查看产品(因为订单由产品组成),但不能管理产品。
- 产品管理员 可以管理产品,并且不应了解任何订单。
所以你创建了两个角色 (Roles),order_admin
和 product_admin
,并分配如下权限 (Permissions):
order_admin
https://api.store.io/orders
read:order
、write:order
、delete:order
https://api.store.io/products
read:product
product_admin
https://api.store.io/products
read:product
、write:product
、delete:product
以下是这两个角色 (Roles) 的示意图:

你可以同时为一个用户分配 order_admin
和 product_admin
,这样他们就会拥有你刚刚定义的全部六个权限 (Permissions)。
注意,订单管理员与产品管理员共享权限 (Permission) read:product
,而用户最终拥有的权限 (Permissions) 是其被分配角色 (Roles) 的所有权限 (Permissions) 的并集。
相关资源
RBAC 实践:为你的应用实现安全授权 (Authorization) 的分步指南
精通 Logto 的 RBAC:全面的真实案例CIAM 102: 授权 (Authorization) 与基于角色的访问控制 (RBAC)