# 了解权限模型

Authing 的访问控制与权限管理模型核心围绕着两个点来设计:资源(Resource)策略(Policy)。策略定义了对某个(类)资源的某个(些)操作权限,将策略授权给用户(或角色),就能知道用户(或角色)是否具备对某个资源的某个操作具备操作权限。

此模型中涉及到了三个实体:

  • 资源 (Resource)
  • 操作 (Action)
  • 主体,即用户或角色 (Identity)

每个策略本质上就是一个 JSON Document,每个策略包含多个语句(Statements):

{
  "statements": [
    {
      "resource": "books:123",
      "action": ["books:edit"],
      "effect": "ALLOW"
    },
    {
      "resource": "books:123",
      "action": ["books:delete"],
      "effect": "DENY"
    }
  ]
}

每个 语句(Statement) 由以下几个部分组成:

  • 资源(Resource):可以是某个特定资源(如 books:123)、多个资源(如 books:123,books:124),也可以是一类资源(如 books:*)。
  • 操作(Action):可以是某个特定操作(如 books:edit)、多个操作(如 books:read,books:edit),也可以是一类操作(如 books:*)。
  • 效用(Effect):允许(ALLOW)或拒绝(DENY)。

你可以将该策略授权给某个用户或某个角色,授权给角色的策略会被该角色下的所有用户继承,被授予策略的用户会自动获得该策略中定义的权限。如果一个用户被授予了多个策略,他具备的权限是这些策略的并集。

如把上述示例策略授予了用户 A(不论是直接授予还是通过角色继承),他将具备资源 books:123books:edit 权限,而不具备 books:delete 权限。