Attribut Method


1Présentation

Temma propose plusieurs attributs servant à filtrer les accès aux contrôleurs/actions en fonction de la méthode HTTP (GET, POST, etc.). L'attribut Method est assez complet et versatile, mais Temma fournit aussi des attributs plus simples et rapides d'utilisation.


2Method

Cet attribut sert à définir les méthodes HTTP qui sont autorisées ou interdites lors de l'accès à un contrôleur ou à une action.

Cela peut être très pratique pour protéger une action contre les failles CSRF (en obligeant une requête à être effectuée en POST et non en GET), ou encore pour définir précisément les méthodes autorisées pour une API.


2.1Paramètres

  • $allowed : (string|array) Méthode HTTP autorisée, ou liste de méthodes autorisées.
  • $forbidden : (string|array) Méthode HTTP interdite, ou liste de méthodes interdites.
  • $redirect : (string) URL vers laquelle rediriger l'utilisateur si la méthode n'est pas autorisée.
  • $redirectVar : (string) Nom de la variable de template contenant l'URL vers laquelle rediriger l'utilisateur.

2.2Priorité

Pour définir l'URL vers laquelle l'utilisateur va être redirigé, l'attribut applique l'ordre de priorité suivant :

  1. Si le paramètre $redirect est défini, il est utilisé.
  2. Si le paramètre $redirectVar est défini, et qu'il contient le nom d'une variable de template qui existe et est non vide, le contenu de celle-ci est utilisé.
  3. Si le fichier etc/temma.php contient une configuration étendue x-security, et que celle-ci contient une clé methodRedirect, le contenu de celle-ci est utilisé.
  4. Si le fichier etc/temma.php contient une configuration étendue x-security, et que celle-ci contient une clé redirect, le contenu de celle-ci est utilisé.

Si aucune URL de redirection n'a été trouvée, une erreur 403 est retournée.


2.3Configuration

Pour que tous les attributs Method redirigent vers la même URL, il suffit de la définir dans le fichier etc/temma.php :

[
    'x-security' => [
        'methodRedirect' => '/badAccess'
    ]
]

Pour que l'URL de redirection soit la même pour les attributs Auth, Method, Referer et Redirect, il suffit de définir la clé redirect dans la configuration étendue x-security du fichier etc/temma.php :

[
    'x-security' => [
        'redirect' => '/login'
    ]
]

2.4Exemples

use \Temma\Attributes\Method as TµMethod;

/* toutes les actions du contrôleur ne sont accessibles qu'en POST. */
#[TµMethod('POST')]
class Actions extends \Temma\Web\Controller {
    // ...
}
use \Temma\Attributes\Method as TµMethod;

class Actions extends \Temma\Web\Controller {
    // cette action n'est accessible qu'en GET
    #[TµMethod('GET')]
    public function getList() {
        // ...
    }

    // cette action est accessible en POST ou PUT
    #[TµMethod(['POST', 'PUT'])]
    public function removeItem(int $id) {
        // ...
    }

    // cette action est accessible avec n'importe quelle
    // méthode sauf PATCH
    #[TµMethod(forbidden: 'PATCH')]
    public function defineItem(int $id, mixed value) {
        // ...
    }

    // cette action est accessible avec n'importe quelle
    // méthode sauf HEAD et DELETE
    #[TµMethod(forbidden: ['HEAD', 'DELETE'])]
    public function fetchData() {
        // ...
    }
}

3Head, Get, Post, Put, Patch, Delete

Ces attributs sont des raccourcis qui simplifient l'utilisation de l'attribut Method. Ils permettent de spécifier la méthode HTTP qui doit obligatoirement être utilisée pour accéder à un contrôleur ou à une action.


3.1Paramètres spécifiques

Ces attributs ne proposent pas de paramètres.


3.2Priorité de redirection

Lorsqu'un contrôleur ou une action est accédé avec une méthode incorrecte (par exemple, une requête est effectuée en GET sur une action qui est configurée avec l'attribut \Temma\Attributes\Methods\POST), il est possible de définir une URL de redirection. Les attributs appliquent l'ordre de priorité suivant :

  1. Si le fichier etc/temma.php contient une configuration étendue x-security, et que celle-ci contient une clé methodRedirect, le contenu de celle-ci est utilisé.
  2. Si le fichier etc/temma.php contient une configuration étendue x-security, et que celle-ci contient une clé redirect, le contenu de celle-ci est utilisé.

Si aucune URL de redirection n'a été trouvée, une erreur 403 est retournée.


3.3Configuration spécifique

Pour que tous les attributs Method, Head, Get, Post, Put, Patch et Delete redirigent vers la même URL, il suffit de définir la clé methodRedirect dans la configuration étendue x-security du fichier etc/temma.php :

[
    'x-security' => [
        'methodRedirect' => '/badAccess'
    ]
]

Pour que l'URL de redirection soit la même que pour les attributs Auth, Method, Referer et Redirect, il suffit de définir la clé redirect dans la configuration étendue x-security du fichier etc/temma.php :

[
    'x-security' => [
        'redirect' => '/login'
    ]
]

3.4Exemples de ces attributs

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 {
    // cette action n'est accessible qu'en HEAD
    #[TµHead]
    public function action1() { }

    // cette action n'est accessible qu'en GET
    #[TµGet]
    public function action2() { }

    // cette action n'est accessible qu'en POST
    #[TµPost]
    public function action3() { }

    // cette action n'est accessible qu'en PUT
    #[TµPut]
    public function action4() { }

    // cette action n'est accessible qu'en PATCH
    #[TµPatch]
    public function action5() { }

    // cette action n'est accessible qu'en DELETE
    #[TµDelete]
    public function action6() { }
}