开放的 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
。
- 前端通过HTTP请求头将
access_token
传递给后端服务器。 - 后端服务器从
access_token
中检索用户id。
提前说明,这些接口也是为(sub, obj, act)
模型设计的(目前)。 URL参数中的permissionId
是应用权限策略的标识,由组织名称和权限策略名称组成(即组织名称/权限名称
)。 正文是由Casbin模型定义的权限请求格式,通常分别代表sub
、obj
和act
。
除了请求强制执行权限控制的 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"
]