CakePHPプロジェクトのROOTディレクトリ(composer.jsonファイルがある場所)からcomposerでプラグインをインストールします。
php composer.phar require cakephp/authorization:^2.0
プロジェクトのsrc/Application.php
に次のステートメントを追加してプラグインをロードします:
$this->addPlugin('Authorization');
Authorizationプラグインは、ミドルウェアレイヤーとしてアプリケーションに統合され、オプションでコンポーネントを統合して、認証のチェックを容易にします。まず、ミドルウェアを適用しましょう。src/Application.phpに、以下のようにクラスをインポートします。:
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;
AuthorizationProviderInterface
をアプリケーションの実装済みインターフェースに追加します。:
class Application extends BaseApplication implements AuthorizationServiceProviderInterface
次に、以下をmiddleware()
メソッドに追加します。:
// Add authorization (after authentication if you are using that plugin too).
$middleware->add(new AuthorizationMiddleware($this));
AuthorizationMiddleware
は、リクエストの処理を開始すると、アプリケーションのフックメソッドを呼び出します。このフックメソッドを使用すると、アプリケーションで使用するAuthorizationService
を定義できます。次のメソッドをsrc/Application.phpに追加します。:
public function getAuthorizationService(ServerRequestInterface $request): AuthorizationServiceInterface
{
$resolver = new OrmResolver();
return new AuthorizationService($resolver);
}
これにより、ORMエンティティをポリシークラスと照合する基本的なポリシーリゾルバーが構成されます。
次に、AuthorizationComponent
をAppController
に追加します。src/Controller/AppController.phpで、次のコードをinitialize()
メソッドに追加します:
$this->loadComponent('Authorization.Authorization');
AuthorizationComponentをロードすることで、アクションごとの認証をより簡単に確認できるようになります。たとえば、次のことができます。:
public function edit($id = null)
{
$article = $this->Article->get($id);
$this->Authorization->authorize($article, 'update');
// Rest of action
}
authorize()
を呼び出すことで、ポリシーを使用してアプリケーションのアクセス制御ルールを適用できます。リクエストに保存されているIDを使用して、どこでも権限を確認できます。