Відкриті API Casbin
Вступ
Припустимо, що фронтенд вашого додатку отримав access_token
залогіненого користувача і тепер хоче автентифікувати користувача для деякого доступу. Ви не можете просто помістити access_token
у заголовок HTTP-запиту для використання цих API, оскільки Casdoor використовує поле Authorization
для перевірки дозволу доступу. Як і будь-які інші API, що надаються Casdoor, поле Authorization
складається з ідентифікатора клієнта додатку та секрету, використовуючи Схему базової HTTP-аутентифікації. Це виглядає як Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>
. З цієї причини API Casbin слід викликати з сервера бекенду додатку. Ось кроки, як це зробити.
Візьміть для прикладу додаток app-vue-python-example на демонстраційному сайті, заголовок авторизації повинен бути: Authorization: Basic 294b09fbc17f95daf2fe dd8982f7046ccba1bbd7851d5c1ece4e52bf039d
.
- Фронтенд передає
access_token
на сервер бекенду через заголовок HTTP-запиту. - Сервер бекенду отримує ідентифікатор користувача з
access_token
.
Як попереднє зауваження, ці інтерфейси також розроблені (наразі) для моделі (sub, obj, act)
. Тіло є форматом запиту, визначеним моделлю Casbin дозволів, який зазвичай представляє sub
, obj
та act
відповідно.
Крім інтерфейсу API для запиту на застосування контролю дозволів, Casdoor також надає інші інтерфейси, які допомагають зовнішнім додаткам отримувати інформацію про політику дозволів, яка також тут перелічена.
Застосувати
The Enforce API supports multiple query parameters to specify which permission(s) to enforce against. Only one parameter should be provided at a time:
permissionId
: The identity of a specific permission policy (format:organization name/permission name
)modelId
: The identity of a permission model (format:organization name/model name
) - enforces against all permissions using this modelresourceId
: The identity of a resource - enforces against all permissions for this resourceenforcerId
: The identity of a specific enforcerowner
: The organization name - enforces against all permissions in this organization
Request using 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"]'
Request using 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"]'
Request using 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"]'
Response:
{
"status": "ok",
"msg": "",
"sub": "",
"name": "",
"data": [
true
],
"data2": [
"example-org/example-model/example-adapter"
]
}
Note: When using modelId
, resourceId
, enforcerId
, or owner
parameters, the response data
array may contain multiple boolean values (one for each permission that was checked), and data2
contains the corresponding model and adapter identifiers.
BatchEnforce
The BatchEnforce API supports multiple query parameters to specify which permission(s) to enforce against. Only one parameter should be provided at a time:
permissionId
: The identity of a specific permission policy (format:organization name/permission name
)modelId
: The identity of a permission model (format:organization name/model name
) - enforces against all permissions using this modelenforcerId
: The identity of a specific enforcerowner
: The organization name - enforces against all permissions in this organization
Request using 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"]]'
Request using 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"
]
}
Note: When using modelId
, enforcerId
, or owner
parameters, the response data
array may contain multiple arrays of boolean values (one array for each permission that was checked), and data2
contains the corresponding model and adapter identifiers.
GetAllObjects
This API retrieves all objects (resources) that a user has access to. It accepts an optional userId
parameter. If not provided, it uses the logged-in user's session.
Request with userId
parameter:
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>'
Request using session (userId determined from session):
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
This API retrieves all actions that a user can perform. It accepts an optional userId
parameter. If not provided, it uses the logged-in user's session.
Request with userId
parameter:
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>'
Request using session (userId determined from session):
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
This API retrieves all roles assigned to a user. It accepts an optional userId
parameter. If not provided, it uses the logged-in user's session.
Request with userId
parameter:
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>'
Request using session (userId determined from session):
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"
]
}