Installez le plugin avec composer depuis le répertoire racine de votre project CakePHP (là où se trouve le fichier composer.json).
php composer.phar require "cakephp/authorization:^2.0"+
La version 2 du Plugin Authorization est compatible avec CakePHP 4.
Chargez le plugin en ajoutant la ligne suivante dans le fichier
src/Application.php
de votre projet:
$this->addPlugin('Authorization');
Le plugin Authorization s’intègre dans votre application en tant que middleware, et sur option comme composant (component) pour faciliter la vérification des autorisations. Commençons par mettre en place le middleware. Dans src/Application.php, ajoutez les imports de classes suivants:
use Authorization\AuthorizationService;
use Authorization\AuthorizationServiceInterface;
use Authorization\AuthorizationServiceProviderInterface;
use Authorization\Middleware\AuthorizationMiddleware;
use Authorization\Policy\OrmResolver;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
Ajoutez AuthorizationServiceProviderInterface
aux interfaces implémentées par
votre classe Application:
class Application extends BaseApplication implements AuthorizationServiceProviderInterface
Puis modifiez votre méthode middleware()
pour la faire ressembler à ceci:
public function middleware(MiddlewareQueue $middlewareQueue): MiddlewareQueue
{
// Middleware fourni par CakePHP
$middlewareQueue->add(new ErrorHandlerMiddleware(Configure::read('Error')))
->add(new AssetMiddleware())
->add(new RoutingMiddleware($this))
->add(new BodyParserMiddleware())
// Si vous utilisez Authentication, il doit se trouver *avant* Authorization.
->add(new AuthenticationMiddleware($this));
// Ajoutez le AuthorizationMiddleware *après* les middlewares
// routing, body parser et authentication.
->add(new AuthorizationMiddleware($this));
return $middlewareQueue();
}
Le placement du AuthorizationMiddleware
est important. Il faut l’ajouter
après le middleware authentication. Cela garantit que la requête ait une
indtance identity
utilisable pour les vérifications d’autorisations.
Le AuthorizationMiddleware
appellera une méthode crochet (hook) de votre
application au démarrage du traitement de la requête. Cette méthode permet à
votre application de définir le AuthorizationService
qu’elle veut utiliser.
Ajoutez la méthode suivante à votre src/Application.php:
public function getAuthorizationService(ServerRequestInterface $request): AuthorizationServiceInterface
{
$resolver = new OrmResolver();
return new AuthorizationService($resolver);
}
Cela configure les Résolveurs de Policy basiques qui confronteront les entities de l’ORM avec leurs classes de policies (politiques d’autorisations).
Ensuite, ajoutons le AuthorizationComponent
à AppController
. Dans
src/Controller/AppController.php, ajoutez ceci à la méthode
initialize()
:
$this->loadComponent('Authorization.Authorization');
En chargeant le AuthorizationComponent nous pourrons plus facilement vérifier les autorisations action par action. Par exemple, nous pouvons faire ceci:
public function edit($id = null)
{
$article = $this->Article->get($id);
$this->Authorization->authorize($article, 'update');
// Le reste de l'action
}
En appelant authorize
, nous pouvons utiliser nos Policies pour
renforcer les règles de contrôle d’accès à notre application. Vous pouvez
vérifier les permissions depuis n’importe quel endroit en utilisant
l’identity stockée dans la requête.