アプリケーションに 認可ミドルウェア を適用して、リクエストに identity
を追加したら、認可のチェックを開始できます。
ミドルウェアは各リクエストの identity
を IdentityDecorator
でラップし、認可に関連するメソッドを追加します。
モデル、サービス、テンプレートに identity
を渡すことで、
アプリケーションの任意の場所で簡単に認可を確認することができます。
デフォルトのデコレーターをカスタマイズしたり置き換えたりする方法については、 Identity Decorator のセクションを参照してください。
can
メソッドを使用すると、1つのリソースの認可を確認することができます。
通常、これはORMエンティティ、またはアプリケーションドメインオブジェクトである。
あなたの Policies は認可を決定するためのロジックを提供します。:
// リクエストからIDを取得する
$user = $this->request->getAttribute('identity');
// $article の権限をチェック
if ($user->can('delete', $article)) {
// 削除の操作...
}
ポリシーが ポリシーのResultオブジェクト を返す場合、 canResult()
が結果インスタンスを返すので、そのステータスを必ずチェックしてください。:
// ポリシーが結果を返すと仮定して
$result = $user->canResult('delete', $article);
if ($result->getStatus()) {
// 削除する
}
ページ分割されたクエリのようなオブジェクトのコレクションに権限チェックを適用する必要がある場合、 現在のユーザがアクセスできるレコードのみを取得したいことがよくあるでしょう。 このプラグインは、この概念を 'scope' として実装しています。 スコープ・ポリシーでは、クエリや結果セットを 'scope' し、 更新されたリストやクエリ・オブジェクトを返すことができます:
// リクエストから 'identity' を取得する
$user = $this->request->getAttribute('identity');
// クエリに許可条件を適用し、
// 現在のユーザーがアクセスできるレコードのみを返すようにします。
$query = $user->applyScope('index', $query);
AuthorizationComponent をコントローラのアクションで使用することで、失敗時に例外が発生する認証チェックを効率化することができます。