認可の確認

アプリケーションに 認可ミドルウェア を適用して、リクエストに identity を追加したら、認可のチェックを開始できます。 ミドルウェアは各リクエストの identityIdentityDecorator でラップし、認可に関連するメソッドを追加します。

モデル、サービス、テンプレートに 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 をコントローラのアクションで使用することで、失敗時に例外が発生する認証チェックを効率化することができます。