Autenticação e Autorização da API
1) Prefixo de endpoint
O projeto publica a REST API com prefixo /api (não /wp-json):
- Implementação:
we-dhedalos/functions/wp/rest_path.php - Exemplo:
/api/dhedalos/v1/search
2) Token de serviço
Callback de validação
- Função:
rest_auth_validate_token - Arquivo:
we-dhedalos/functions/rest/auth_callback.php
Regra aplicada
- Lê header
Authorization. - Remove prefixo
Svc. - Compara com constante
API_SERVICE_TOKEN. - Se token esperado não estiver definido, retorna
WP_Error. - Se token enviado estiver ausente/incorreto, retorna
false.
Header esperado
Authorization: Svc <API_SERVICE_TOKEN>
3) Sessão WordPress
Rotas com permission_callback = is_user_logged_in exigem cookie de sessão válido.
Header típico:
Cookie: wordpress_logged_in_xxx=<SESSION_COOKIE>
4) Regras de role customizadas
user_is_admin
Arquivo: we-dhedalos/functions/utils/permission.php
- Retorna
truepara roles:facilitator,supervisor,administrator.
user_is_supervisor
Arquivo: we-dhedalos/functions/utils/permission.php
- Retorna
truepara roles:supervisor,administrator.
user_is_facilitator
Arquivo: we-dhedalos/functions/utils/permission.php
- Retorna
truepara role:facilitator.
5) Tipos de proteção observados
| Tipo | Como aparece no código | Exemplo |
|---|---|---|
| Pública | __return_true | /dhedalos/v1/search |
| Token de serviço | rest_auth_validate_token | /dhedalos/v1/registration/people |
| Sessão WP | is_user_logged_in | /dhedalos/v1/user |
| Sessão + role | callback inline chamando user_is_admin/current_user_can | /dhedalos/v1/classes/supervisor |
| Capacidade WP admin | current_user_can('manage_options') | /dhedalos/v1/export/users |
| Sem callback explícito | register_rest_route sem permission_callback | /dhedalos/v1/course/{slug} |
6) Observações de risco técnico
- Existem rotas sensíveis com
permission_callbackpermissivo (__return_true) em partes do domínio de classes/cancelamento. - A autorização final de várias rotas depende de validações internas no callback, não apenas do
permission_callbackda rota. - A rota de desenroll (
DELETE /dhedalos/v1/enroll/{enroll_id}) não está disponível em todos os ambientes por condição de hostname.
7) Atualizações recentes (recuperação de aula ao vivo)
GET /dhedalos/v1/cycles/recovery-status- Proteção: callback inline com
is_user_logged_in. - Referência:
we-dhedalos/functions/rest/cycles.php(register_rest_routeda rotacycles/recovery-status).
- Proteção: callback inline com
POST /dhedalos/v1/class/{class_id}/recovery-presence/{activity}- Proteção: callback inline com
current_user_can()da classeClasses. roles_allowed:facilitator,subscriber,supervisor,administrator.- Referências:
we-dhedalos/functions/rest/classes.php(rota e propriedade$roles_allowed).
- Proteção: callback inline com
Pendências
- Confirmar padrão exato de métodos aceitos para rotas registradas como
WP_REST_Server::EDITABLEno ambiente de execução. - Definir e versionar uma matriz oficial de autorização por endpoint+role (atualmente espalhada em callbacks inline).