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 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
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"]]'
Resposta:
{
"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>'
Resposta:
{
"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>'
Resposta:
{
"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>'
Resposta:
{
"status": "ok",
"msg": "",
"data": [
"role_kcx66l"
]
}