# 实现基于角色的访问控制(RBAC)

# 什么是 RBAC

基于角色的访问控制(Role-based access control,简称 RBAC),指的是通过用户的角色(Role)赋予其相关权限,这实现了细粒度的访问控制,并提供了一个相比直接授予单个用户权限,更简单、可控的管理方式。

当使用 RBAC 时,通过分析系统用户的实际情况,基于共同的职责和需求,将他们分配给不同的角色。然后可以授予每个用户一个或多个角色,每个角色具有一个或多个权限,这种 用户-角色角色-权限 间的关系,让我们可以不用再单独管理单个用户,用户从具备的角色里面继承所需的权限,从而使得用户赋权这件事变得更加简单。

举一个公司内所有在职员工具备登录公司邮箱的权限的场景,如果应用 RBAC,就可以赋予所有在职员工 ​employee​ 角色,​employee​ 角色具备 ​email:login​ 权限,如此所有员工就具备了登录公司邮箱的权限。如果有员工离职,只需要将其移出 ​employee​ 角色,而不需单独收回权限。本质上,一个角色(Role)就是一组权限(Permission)的集合。使用角色添加、删除、调整权限,相比单独赋予单个用户权限更加简单。当你的用户基数不断增长时,角色会变得尤为有用。

在规划访问控制策略时,最佳实践是给予用户完成工作必须的最小权限。

# 使用 RBAC 的优势

  • 系统性、可重复性的权限指派
  • 更方便得用户权限审计,快速定位问题
  • 快速地添加、修改角色,甚至可以调用 API 实现
  • 减少授予用户权限时发生错误的可能性
  • 引入 第三方用户/新用户/未登录用户 时,赋予他们预先配置好的角色,比如 ​guest​