Atributo Method
1Apresentação
O Temma oferece vários atributos para filtrar o acesso a controladores/ações de acordo com o método HTTP (GET, POST, etc.). O atributo Method é bastante completo e versátil, mas o Temma também fornece atributos mais simples e rápidos de usar.
2Method
Este atributo é usado para definir os métodos HTTP permitidos ou proibidos ao acessar um controlador ou uma ação.
Isso pode ser muito útil para proteger uma ação contra falhas de CSRF (forçando uma requisição a ser feita como POST e não como GET), ou para definir com precisão os métodos autorizados de uma API.
2.1Parâmetros
- $allowed: (string|array) Método HTTP permitido, ou lista de métodos permitidos.
- $forbidden: (string|array) Método HTTP proibido, ou lista de métodos proibidos.
- $redirect: (string) URL para a qual redirecionar o usuário se o método não for autorizado.
- $redirectVar: (string) Nome da variável de template contendo a URL para a qual redirecionar o usuário.
2.2Prioridade
Para definir a URL para a qual o usuário será redirecionado, o atributo aplica a seguinte ordem de prioridade:
- Se o parâmetro $redirect estiver definido, ele é usado.
- Se o parâmetro $redirectVar estiver definido, e contiver o nome de uma variável de template existente e não vazia, seu conteúdo é usado.
- Se o arquivo etc/temma.php contiver uma configuração estendida x-security, e esta contiver uma chave methodRedirect, seu conteúdo é usado.
- Se o arquivo etc/temma.php contiver uma configuração estendida x-security, e esta contiver uma chave redirect, seu conteúdo é usado.
Se nenhuma URL de redirecionamento for encontrada, um erro 403 é retornado.
2.3Configuração
Para garantir que todos os atributos Method redirecionem para a mesma URL, basta defini-la no arquivo etc/temma.php:
<?php
return [
'x-security' => [
'methodRedirect' => '/badAccess'
]
];
Para garantir que a URL de redirecionamento seja a mesma para os atributos Auth, Method, Referer e Redirect, basta definir a chave redirect na configuração estendida x-security do arquivo etc/temma.php:
<?php
return [
'x-security' => [
'redirect' => '/login'
]
];
2.4Exemplos
use \Temma\Attributes\Method as TµMethod;
/* todas as ações do controlador só podem ser acessadas via POST. */
#[TµMethod('POST')]
class Actions extends \Temma\Web\Controller {
// ...
}
use \Temma\Attributes\Method as TµMethod;
class Actions extends \Temma\Web\Controller {
// esta ação só está disponível via GET
#[TµMethod('GET')]
public function getList() {
// ...
}
// esta ação pode ser acessada via POST ou PUT
#[TµMethod(['POST', 'PUT'])]
public function removeItem(int $id) {
// ...
}
// esta ação pode ser acessada com qualquer método,
// exceto PATCH
#[TµMethod(forbidden: 'PATCH')]
public function defineItem(int $id, mixed $value) {
// ...
}
// esta ação pode ser acessada com qualquer
// método, exceto HEAD e DELETE
#[TµMethod(forbidden: ['HEAD', 'DELETE'])]
public function fetchData() {
// ...
}
}
3Head, Get, Post, Put, Patch, Delete
Esses atributos são atalhos que simplificam o uso do atributo Method. Eles especificam o método HTTP que deve ser usado para acessar um controlador ou uma ação.
3.1Parâmetros específicos
Esses atributos não têm parâmetros.
3.2Prioridade de redirecionamento
Quando um controlador ou uma ação é acessado usando um método incorreto (por exemplo, uma requisição GET é feita em uma ação configurada com o atributo \Temma\Attributes\Methods\Post), uma URL de redirecionamento pode ser definida. Os atributos aplicam a seguinte ordem de prioridade:
- Se o arquivo etc/temma.php contiver uma configuração estendida x-security, e esta contiver uma chave methodRedirect, seu conteúdo é usado.
- Se o arquivo etc/temma.php contiver uma configuração estendida x-security, e esta contiver uma chave redirect, seu conteúdo é usado.
Se nenhuma URL de redirecionamento for encontrada, um erro 403 é retornado.
3.3Configuração específica
Para garantir que todos os atributos Method redirecionem para a mesma URL, basta defini-la no arquivo etc/temma.php:
<?php
return [
'x-security' => [
'methodRedirect' => '/badAccess'
]
];
Para garantir que a URL de redirecionamento seja a mesma para os atributos Auth, Method, Referer e Redirect, basta definir a chave redirect na configuração estendida x-security do arquivo etc/temma.php:
<?php
return [
'x-security' => [
'redirect' => '/login'
]
];
3.4Exemplos de atributos
use \Temma\Attributes\Methods\Head as TµHead;
use \Temma\Attributes\Methods\Get as TµGet;
use \Temma\Attributes\Methods\Post as TµPost;
use \Temma\Attributes\Methods\Put as TµPut;
use \Temma\Attributes\Methods\Patch as TµPatch;
use \Temma\Attributes\Methods\Delete as TµDelete;
class Actions extends \Temma\Web\Controller {
// esta ação só está disponível via HEAD
#[TµHead]
public function action1() { }
// esta ação só está disponível via GET
#[TµGet]
public function action2() { }
// esta ação só está disponível via POST
#[TµPost]
public function action3() { }
// esta ação só está disponível via PUT
#[TµPut]
public function action4() { }
// esta ação só está disponível via PATCH
#[TµPatch]
public function action5() { }
// esta ação só está disponível via DELETE
#[TµDelete]
public function action6() { }
}