Laravel権限制御ゲートポリシー

不言
リリース: 2023-03-29 18:48:01
オリジナル
2207 人が閲覧しました

この記事は主にLaravelのパーミッションコントロールゲートポリシーを紹介していますが、必要な友達は参考にしてください

基本的には実行可能なロジックの説明です。ユニット 生産を開始するかどうかを決定します。
定義 ユーザー インスタンスまたは一意の識別パラメーター、およびそれに関連付けられた使用リソースが必要です。通常、クロージャ、関数、またはメソッドを使用して、パーミッション論理ユニット ハンドル、パラメータパーミッション操作オブジェクト、およびユーザー情報を呼び出します。

Origin

最も基本的な権限制御、三項演算子? :。明らかに条件判断を行い、対応する実行ロジックにジャンプします。

Laravelの考え方は、実行ロジック(本番コード)と認可(条件判断ロジック)を分離することです。条件の生成に焦点を当て、一般的に言えば、認可ロジックを強化します (これは複雑な認可に非常に役立ちます)。 Postulate: すべてのコードは、サービスの登録が完了した後に開始されます。したがって、以下のコードが登録されます。その目的は、真に判断を許可する論理体を見つけることです。

Gate::define('update articles', 'ArticlePolicy@update')
ログイン後にコピー
最初のパラメータは明らかに単なる認可識別子 (呼び出しに使用されるハンドル パラメータ) であり、2 番目のパラメータは認可された論理実行本体です。

laravel認可定義


AuthServiceProviderbootメソッドで認可を定義します

Gate::define('update articles', function ($user, $article) {
    return $user->id == $article->user_id;
});

Gate::define('update articles', 'ArticlePolicy@edit');
ログイン後にコピー
<?php

namespace App\Policies;

use App\User;
use App\Models\Article;

class ArticlePolicy
{
    public function update(User $user, Article $article)
    {
        return $user->id == $article->author_id;
    }
}
ログイン後にコピー

laravel認可useAuthServiceProviderboot 方法里定义授权

/**
 * The policy mappings for the application.
 *
 * @var array
 */
protected $policies = [
    Article::class => ArticlePolicy::class,
];
ログイン後にコピー
<?php

namespace App\Policies;

use App\User;
use App\Models\Article;
use Illuminate\Auth\Access\HandlesAuthorization;

class ArticlePolicy
{
    use HandlesAuthorization;

    public function create(User $user)
    {
        return true;
    }

    public function delete(User $user, Article $article)
    {
        return $user->id == $article->author_id;
    }

     public function before($user, $ability)
    {
        if($user->isSuperAdmin()){
            return true;
        }
    }
 }
ログイン後にコピー

laravel授权使用

  1. Gate 门面:Gate::allows('update articles', $article)Gate::denies('update articles', $article)

  2. Controller 引入了

    trait AuthorizesRequests

    $this->authorize('update articles', $article)

  3. Blade 模板:@can('update articles', $article)@cannot('update articles', $article) 指令。

  4. User Model 实例:$user->can('update articles', $article)$user->cannot('update articles', $article)

Laravel Policy

为了方便地定义和使用授权,Laravel 在Gate的基础上引入了 Policy。policy内部的每一个方法,都会被用gate::define方法的描述注册。所以这就是为什么使用了策略类注册之后,即便没有用Gate门面定义授权逻辑,在控制器内仍然可以使用Gate::allow('策略类方法')的形式来进行授权判断 。

AuthServiceProviderpolicies 数组属性里先定义授权映射关系

rrreeerrreee

注意

Policy 只是在普通 PHP 类基础上添加了一个 HandlesAuthorization

  1. ゲート ファサード: Gate::allows('update Article', $article) および Gate::denies('update Article', $article) コード>。 <br>

コントローラーは

トレイトを導入します リクエストを承認

$this->authorize('記事を更新', $article)

  • ブレード テンプレート: @can('update Articles', $article) および @cannot('update Articles', $article) ディレクティブ。 🎜
  • 🎜ユーザー モデル インスタンス: $user->can('update Articles', $article) および $user->cannot('update Articles' 、$article)。 🎜
  • 🎜🎜Laravel Policy🎜🎜🎜🎜認可を簡単に定義して使用するために、Laravel では Gate に基づいた Policy を導入しています。ポリシー内の各メソッドは、gate::define メソッドの説明とともに登録されます。このため、ポリシー クラスの登録を使用した後、ゲート ファサードで認可ロジックが定義されていない場合でも、コントローラーで Gate::allow('戦略クラス メソッド') の形式を使用して認可判定を実行できます。 🎜🎜🎜まず、AuthServiceProviderpolicies 配列属性で認可マッピング関係を定義します🎜rrreeerrreee🎜: 🎜🎜ポリシーは通常のポリシーのみに基づいていますPHP クラス HandlesAuthorization 特性を追加しました。 🎜🎜 ポリシーでは、すべてのメソッドが実行される前に呼び出され、管理者の承認ロジックを処理するためによく使用されます。 🎜🎜🎜関連する推奨事項: 🎜🎜🎜Laravel が gulp を使用してフロントエンド リソースを構築する方法🎜🎜

    以上がLaravel権限制御ゲートポリシーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    関連ラベル:
    ソース:php.cn
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    最新の問題
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート