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