跳到主内容

开放的 Casbin API

概述​

前端持有用户的 access_token,后端需要检查权限。 Casbin API 必须从后端调用,使用 应用 的客户端 ID 和密钥做 HTTP Basic 认证:Authorization: Basic <clientId> <clientSecret>。示例(演示应用):Authorization: Basic 294b09fbc17f95daf2fe dd8982f7046ccba1bbd7851d5c1ece4e52bf039d。

流程:前端把用户的 access_token 发给后端;后端从令牌中取出用户 ID,用应用的客户端凭据调用 Casbin API。请求体遵循权限的 Casbin 模型(通常是 [sub, obj, act])。

除了执行接口,Casdoor 还提供读取策略数据的接口,列在下面。

Enforce​

向 /api/enforce 发送 POST 请求,带上以下查询参数中的恰好一个:

  • permissionId:org/permission-name
  • modelId:org/model-name(使用该模型的所有权限)
  • resourceId:资源 ID(该资源的所有权限)
  • enforcerId:执行器 ID
  • owner:组织名(该组织中的所有权限)

使用 permissionId 的示例:

curl --location --request POST 'http://localhost:8000/api/enforce?permissionId=example-org/example-permission' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>' \
--data-raw '["example-org/example-user", "example-resource", "example-action"]'

使用 modelId 的示例:

curl --location --request POST 'http://localhost:8000/api/enforce?modelId=example-org/example-model' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>' \
--data-raw '["example-org/example-user", "example-resource", "example-action"]'

使用 resourceId 的示例:

curl --location --request POST 'http://localhost:8000/api/enforce?resourceId=example-org/example-resource' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>' \
--data-raw '["example-org/example-user", "example-resource", "example-action"]'

响应:

{
"status": "ok",
"msg": "",
"sub": "",
"name": "",
"data": [
true
],
"data2": [
"example-org/example-model/example-adapter"
]
}

使用 modelId、resourceId、enforcerId 或 owner 时,响应中的 data 可能包含多个布尔值(每个权限一个),data2 列出对应的模型 / 适配器 ID。

BatchEnforce​

查询参数与 Enforce 相同(一次只能用一个)。请求体是由 [sub, obj, act] 数组组成的数组:

  • permissionId、modelId、enforcerId、owner:与 Enforce 相同(一次只能用一个)。

使用 permissionId 的示例:

curl --location --request POST 'http://localhost:8000/api/batch-enforce?permissionId=example-org/example-permission' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>' \
--data-raw '[["example-org/example-user", "example-resource", "example-action"], ["example-org/example-user2", "example-resource", "example-action"], ["example-org/example-user3", "example-resource", "example-action"]]

使用 modelId 的示例:

curl --location --request POST 'http://localhost:8000/api/batch-enforce?modelId=example-org/example-model' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>' \
--data-raw '[["example-org/example-user", "example-resource", "example-action"], ["example-org/example-user2", "example-resource", "example-action"]]'

响应:

{
"status": "ok",
"msg": "",
"sub": "",
"name": "",
"data": [
[
true,
true,
false
]
],
"data2": [
"example-org/example-model/example-adapter"
]
}

使用 modelId、enforcerId 或 owner 时,data 包含多个布尔数组(每个权限一个),data2 列出模型 / 适配器 ID。

GetAllObjects​

返回用户可以访问的所有对象(资源)。可选查询参数:userId(默认为当前会话用户)。

带 userId:

curl --location --request GET 'http://localhost:8000/api/get-all-objects?userId=example-org/example-user' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>'

不带 userId(使用会话):

curl --location --request GET 'http://localhost:8000/api/get-all-objects' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>'

响应:

{
"status": "ok",
"msg": "",
"data": [
"app-built-in",
"example-resource"
]
}

GetAllActions​

返回用户可以执行的所有操作。可选的 userId(默认为会话用户)。

带 userId:

curl --location --request GET 'http://localhost:8000/api/get-all-actions?userId=example-org/example-user' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>'

不带 userId(使用会话):

curl --location --request GET 'http://localhost:8000/api/get-all-actions' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>'

响应:

{
"status": "ok",
"msg": "",
"data": [
"read",
"write",
"admin"
]
}

GetAllRoles​

返回分配给用户的所有角色。可选的 userId(默认为会话用户)。

带 userId:

curl --location --request GET 'http://localhost:8000/api/get-all-roles?userId=example-org/example-user' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>'

不带 userId(使用会话):

curl --location --request GET 'http://localhost:8000/api/get-all-roles' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>'

响应:

{
"status": "ok",
"msg": "",
"data": [
"role_kcx66l"
]
}

RunCasbinCommand​

通过 Casdoor 运行 Casbin CLI 命令(Java、Go、Node.js、Python 等),并返回输出。结果在内存中缓存 5 分钟,相同的请求直接返回缓存结果。

**访问控制:**非演示模式下需要管理员权限。演示模式下,这个接口公开可访问。

查询参数:

  • language:Casbin CLI 的语言(go、java、node、python 等)
  • args:CLI 参数组成的 JSON 数组(例如 ["-v"]、["new"])。放在查询参数中时要做 URL 编码。

示例:

curl --location --request GET 'http://localhost:8000/api/run-casbin-command?language=go&args=["-v"]' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>'

响应:

{
"status": "ok",
"msg": "",
"data": "casbin version 2.x.x"
}

缓存键由 language 和 args 决定,过期的条目会自动清除。