# 实现基于角色的访问控制(RBAC)
# 什么是 RBAC
基于角色的访问控制(Role-based access control,简称 RBAC),指的是通过用户的角色(Role)赋予其相关权限,这实现了细粒度的访问控制,并提供了一个相比直接授予单个用户权限,更简单、可控的管理方式。
当使用 RBAC 时,通过分析系统用户的实际情况,基于共同的职责和需求,将他们分配给不同的角色。然后可以授予每个用户一个或多个角色,每个角色具有一个或多个权限,这种 用户-角色、角色-权限 间的关系,让我们可以不用再单独管理单个用户,用户从具备的角色里面继承所需的权限,从而使得用户赋权这件事变得更加简单。
举一个公司内所有在职员工具备登录公司邮箱的权限的场景,如果应用 RBAC,就可以赋予所有在职员工 employee 角色,employee 角色具备 email:login 权限,如此所有员工就具备了登录公司邮箱的权限。如果有员工离职,只需要将其移出 employee 角色,而不需单独收回权限。本质上,一个角色(Role)就是一组权限(Permission)的集合。使用角色添加、删除、调整权限,相比单独赋予单个用户权限更加简单。当你的用户基数不断增长时,角色会变得尤为有用。
在规划访问控制策略时,最佳实践是给予用户完成工作必须的最小权限。
# 使用 RBAC 的优势
- 系统性、可重复性的权限指派
- 更方便得用户权限审计,快速定位问题
- 快速地添加、修改角色,甚至可以调用 API 实现
- 减少授予用户权限时发生错误的可能性
- 引入 第三方用户/新用户/未登录用户 时,赋予他们预先配置好的角色,比如 guest