Открытые 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)
. Параметр permissionId
в параметрах URL является идентификатором применяемой политики разрешений, который состоит из названия организации и названия политики разрешений (т.е., название организации/название разрешения
). Тело является форматом запроса, определенным моделью Casbin разрешений, обычно представляющим sub
, obj
и act
соответственно.
В дополнение к API-интерфейсу для запроса применения контроля разрешений, Casdoor также предоставляет другие интерфейсы, которые помогают внешним приложениям получать информацию о политике разрешений, которая также перечислена здесь.
Применить
Запрос:
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"
]