跳到主内容

开放的 Casbin API

介绍

假设你的应用程序的前端已经获取了已登录用户的access_token,现在想要对用户进行一些访问的认证。 你不能简单地将access_token放入HTTP请求头来使用这些API,因为Casdoor使用Authorization字段来检查访问权限。 像Casdoor提供的其他API一样,Authorization字段由应用客户端id和密钥组成,使用基本的HTTP认证方案。 它看起来像Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>。 因此,Casbin API 应当被应用的后端服务器调用。 以下是如何操作的步骤。

以演示站点中的app-vue-python-example应用为例,授权头应该是:Authorization: Basic 294b09fbc17f95daf2fe dd8982f7046ccba1bbd7851d5c1ece4e52bf039d

  1. 前端通过HTTP请求头将access_token传递给后端服务器。
  2. 后端服务器从access_token中检索用户id。

提前说明,这些接口也是为(sub, obj, act)模型设计的(目前)。 URL参数中的permissionId是应用权限策略的标识,由组织名称和权限策略名称组成(即组织名称/权限名称)。 正文是由Casbin模型定义的权限请求格式,通常分别代表subobjact

除了请求强制执行权限控制的 API 接口以外,Casdoor 也提供了其它一些有助于外部应用获取权限策略信息的接口,也一并列在此处。

Enforce

请求:

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"]'

响应:

{
"status": "ok",
"msg": "",
"sub": "",
"name": "",
"data": [
true
],
"data2": null
}

BatchEnforce

请求:

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"]]

响应:

{
"status": "ok",
"msg": "",
"sub": "",
"name": "",
"data": [
[
true,
true,
false
]
],
"data2": null
}

GetAllObjects

请求:

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

响应:

[
"app-built-in"
]

GetAllActions

请求:

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

响应:

[
"read",
"write",
"admin"
]

GetAllRoles

请求:

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

响应:

[
"role_kcx66l"
]