RBAC vs ABAC vs ReBAC: Choosing the Right Permission System in TypeScript

来源: blog.webdevsimplified.com 2025年11月3日 ⭐⭐⭐⭐⭐ (5星)
TypeScript RBAC ABAC 权限系统 安全

核心内容

授权是应用中看似简单但随着应用增长会迅速失控的功能。本文深入探讨最常见的授权模型(RBAC、ABAC 和 ReBAC),通过实用的 TypeScript 示例展示每种模型何时出色、何时失效。

关键亮点

1. 授权 vs 认证

2. RBAC (Role-Based Access Control)

最简单的模型:用户分配角色,角色拥有权限。

type Role = "admin" | "editor" | "viewer"

const rolePermissions: Record<Role, Permission[]> = {
  admin: ["read:articles", "create:articles", "edit:articles", "delete:articles", "manage:users"],
  editor: ["read:articles", "create:articles", "edit:articles"],
  viewer: ["read:articles"],
}

优点: 简单、易理解、易实现

缺点: 当权限需要考虑上下文(所有权、公司、锁定状态)时变得笨拙

3. ABAC (Attribute-Based Access Control)

基于属性的访问控制:询问用户、资源和环境的属性。

const policies: Policy[] = [
  {
    name: "Admins can do anything",
    evaluate: ({ user }) => user.role === "admin",
  },
  {
    name: "Authors can edit their own documents",
    evaluate: ({ user, article }) => 
      action === "edit" && article.authorId === user.id && !article.isLocked,
  },
]

优点: 策略模块化、可测试、易扩展

缺点: 当授权严重依赖实体间关系时变得复杂

4. ReBAC (Relationship-Based Access Control)

基于关系的访问控制:处理嵌套文件夹、团队层级等复杂关系。

适用场景: Google Drive 文档共享、嵌套资源权限

选择建议

实用价值

⭐⭐⭐⭐⭐ 这是一篇权限系统的深度指南,适合后端开发者、安全工程师和需要构建授权系统的全栈工程师。通过实际代码示例清晰展示三种模型的优缺点和适用场景。


探索时间: 2026-03-18 | 来源: Web Dev Simplified