CakePHP 4 の DebugKit を Authorization の対象外にする方法

はじめに

一昨日の投稿では、CakePHP 4 で Authorization プラグインを用いたアクセス権限の設定方法をご紹介しました。

Authorization プラグインを導入すると、基本的には全画面にアクセス可否の処理を書く必要があります。

ここで問題になるのが DebugKit で、これも Authorization の対象となり、DebugKit ツールバー(画面右下に出る CakePHP アイコンの部分)がエラー表示となってしまいます。

そこで今日は CakePHP 4 で Authorization を導入した際に DebugKit を対象外にする方法をご紹介します。

CakePHP
4.1.2
CakePHP Authorization
2.0.0
CakePHP DebugKit
4.3.1

今回は「CakePHP 4 で Authorization プラグインを用いてアクセス権限を設定する方法」で紹介したサンプルプログラムで動作確認しています。

対応方法

DebugKit を Authorization の対象外にするには、Application.php に追加した getAuthorizationService() を下記のように変更すれば OK です。

/src/Application.php
public function getAuthorizationService(ServerRequestInterface $request): AuthorizationServiceInterface
{
    $resolver = new OrmResolver();
    $service = new AuthorizationService($resolver);

    // DebugKit は対象外
    if ($request->getParam('plugin') === 'DebugKit') {
        $service->skipAuthorization();
    }

    return $service;
}

また、ミドルウェアで「'requireAuthorizationCheck' => false」を指定する場合も、アクセス可否の処理が必須ではなくなるので、DebugKit のエラーは出なくなります。

/src/Application.php
public function middleware(MiddlewareQueue $middlewareQueue): MiddlewareQueue
{
    $middlewareQueue
      ...
      // ↓ 第2引数を追加
      ->add(new AuthorizationMiddleware($this, [
        'requireAuthorizationCheck' => false
      ]));