このミドルウェアは、ロールベースのアクセスシステムまたは特定のアクションへのアクセスを制御するその他の種類の承認プロセスに対して、各コントローラーやアクションなどのリクエストを承認する場合に役立ちます。
これは、ミドルウェアキューの承認、認証、ルーティングミドルウェアの後に追加する必要があります。
リクエストの承認を処理するロジックは、リクエストポリシーに実装されます。ここにすべてのロジックを追加するか、リクエストからの情報をACLまたはRBAC実装に渡すだけです。
リクエストオブジェクトを処理するためのポリシーを作成します。プラグインには、実装するためのインターフェースが付属しています:
namespace App\Policy;
use Authorization\Policy\RequestPolicyInterface;
use Cake\Http\ServerRequest;
class RequestPolicy implements RequestPolicyInterface
{
/**
* Method to check if the request can be accessed
*
* @param \Authorization\IdentityInterface|null Identity
* @param \Cake\Http\ServerRequest $request Server Request
* @return bool
*/
public function canAccess($identity, ServerRequest $request)
{
if ($request->getParam('controller') === 'Articles'
&& $request->getParam('action') === 'index'
) {
return true;
}
return false;
}
}
リクエストクラスをApplication::getAuthorizationService()
内のポリシーにマッピングします:
use App\Policy\RequestPolicy;
use Authorization\AuthorizationService;
use Authorization\Policy\MapResolver;
use Cake\Http\ServerRequest;
$mapResolver = new MapResolver();
$mapResolver->map(ServerRequest::class, RequestPolicy::class);
return new AuthorizationService($mapResolver);
Application.php
で、AuthorizationMiddlewareの後にRequestAuthorizationMiddlewareをロードしていることを確認します:
// Add authorization (after authentication if you are using that plugin too).
$middleware->add(new AuthorizationMiddleware($this));
$middleware->add(new RequestAuthorizationMiddleware());