Skip to content

RBAC - 基于角色的访问控制

什么是 RBAC?

RBAC就像公司的工牌系统:不同职位的工牌能开不同的门。

  • 用户 = 员工
  • 角色 = 职位(经理、开发者、实习生)
  • 权限 = 能开哪些门

核心思想

简单来说:用户 → 角色 → 权限 → 资源

张三(用户)→ 开发者(角色)→ 编辑文档(权限)→ 文档(资源)

核心概念

  • 用户:使用系统的人
  • 角色:一组权限的集合(如"管理员"、"编辑")
  • 权限:具体能做什么(如"删除文章"、"查看用户")
  • 资源:要保护的东西(如文章、用户数据)

权限分配示例

角色权限
管理员管理用户、查看系统
编辑编辑文档、查看文档
访客查看文档

代码示例

typescript
// 简单的权限检查
function hasPermission(user: User, action: string, resource: string): boolean {
  return user.roles.some(role =>
    role.permissions.some(p =>
      p.action === action && p.resource === resource
    )
  );
}

// 使用
const canEdit = hasPermission(user, 'edit', 'document');

RBAC 权限检查流程

优点

  • 简单易懂:符合直觉,容易理解
  • 管理方便:权限变更只需调整角色
  • 性能好:权限检查快速
  • 适合组织:符合企业层级结构

缺点

  • 角色爆炸:复杂场景下角色数量急剧增长
  • 缺乏灵活性:无法处理特殊情况
  • 静态权限:不考虑时间、地点等环境因素

适用场景

适合:

  • 企业内部系统(组织结构清晰)
  • 小型团队项目(用户少、角色少)
  • 传统行业应用(权限稳定)

不适合:

  • 多租户系统(需要复杂隔离)
  • 社交网络(权限基于关系)
  • 云服务平台(需要细粒度控制)

总结

RBAC简单易用,适合大多数应用。如果你的权限需求不复杂,RBAC就够了。

贡献者

huoshan
huoshan

用知识点燃技术的火山