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を使用して、どこでも権限を確認できます。