APIs Casbin Expostas
Introdução
Vamos supor que o front-end da sua aplicação obteve o access_token
do usuário logado e agora quer autenticar o usuário para algum acesso. Você não pode simplesmente colocar o access_token
no cabeçalho da requisição HTTP para usar essas APIs porque o Casdoor usa o campo Authorization
para verificar a permissão de acesso. Como qualquer outra API fornecida pelo Casdoor, o campo Authorization
consiste no id do cliente da aplicação e no segredo, usando o Esquema de Autenticação HTTP Básico. Parece com Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>
. Por essa razão, as APIs Casbin devem ser chamadas pelo servidor backend da aplicação. Aqui estão os passos de como fazer isso.
Pegue o aplicativo app-vue-python-example no site de demonstração como exemplo, o cabeçalho de autorização deve ser: Authorization: Basic 294b09fbc17f95daf2fe dd8982f7046ccba1bbd7851d5c1ece4e52bf039d
.
- O front-end passa o
access_token
para o servidor backend através do cabeçalho da requisição HTTP. - O servidor backend recupera o id do usuário a partir do
access_token
.
Como uma nota antecipada, essas interfaces também são projetadas (por enquanto) para o modelo (sub, obj, act)
. O permissionId
nos parâmetros da URL é a identidade da política de permissão aplicada, que consiste no nome da organização e no nome da política de permissão (ou seja, nome da organização/nome da permissão
). O corpo é o formato de requisição definido pelo modelo Casbin da permissão, geralmente representando sub
, obj
e act
respectivamente.
Além da interface da API para solicitar a execução do controle de permissão, o Casdoor também fornece outras interfaces que ajudam aplicações externas a obter informações da política de permissão, que também estão listadas aqui.
Enforce
Requisição:
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"]'
Resposta:
{
"status": "ok",
"msg": "",
"sub": "",
"name": "",
"data": [
true
],
"data2": null
}
BatchEnforce
Requisição:
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"]]'
Resposta:
{
"status": "ok",
"msg": "",
"sub": "",
"name": "",
"data": [
[
true,
true,
false
]
],
"data2": null
}
GetAllObjects
Requisição:
curl --location --request GET 'http://localhost:8000/api/get-all-objects' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>'
Resposta:
[
"app-built-in"
]
GetAllActions
Requisição:
curl --location --request GET 'http://localhost:8000/api/get-all-actions' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>'
Resposta:
[
"read",
"write",
"admin"
]
GetAllRoles
Requisição:
curl --location --request GET 'http://localhost:8000/api/get-all-roles' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>'
Resposta:
[
"role_kcx66l"
]