Перейти до основного вмісту

Відкриті 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.

  1. Фронтенд передає access_token на сервер бекенду через заголовок HTTP-запиту.
  2. Сервер бекенду отримує ідентифікатор користувача з 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"
]