이 글은 주로 Laravel 권한 제어 Gate 정책을 소개하는데, 이는 특정 참고 가치가 있습니다. 이제는 모든 사람과 공유합니다. 필요한 친구들이 참고할 수 있습니다.
권한에 대하여
본질적으로는 실행 가능한 논리에 대한 설명입니다. 단위 생산 개시 여부를 결정합니다.
정의 사용자 인스턴스 또는 고유 식별 매개변수와 이에 연결된 사용 리소스가 있어야 합니다. 일반적으로 클로저나 함수 또는 메서드를 사용하여 권한 논리 단위 핸들, 매개변수 권한 작업 개체 및 사용자 정보를 호출합니다.
Origin가장 기본적인 권한 제어, 삼항 연산자? :. 분명히 조건부 판단을 한 다음 해당 실행 논리로 점프합니다.
Laravel의 아이디어는 실행 로직(생산 코드)과 승인(조건부 판단 로직)을 분리하는 것입니다. 조건 생성에 중점을 두고 일반적으로 권한 부여 논리를 강화합니다(복잡한 권한 부여에 매우 유용함). 가정: 모든 코드는 서비스 등록이 완료된 후 시작됩니다. 그러면 다음과 같은 코드가 등록됩니다. 그 목적은 진정으로 판단을 승인하는 논리적 본체를 찾는 것입니다.
Gate::define('update articles', 'ArticlePolicy@update')
첫 번째 매개변수는 분명히 인증 식별자(호출에 사용되는 핸들 매개변수)이고, 두 번째 매개변수는 인증된 논리적 실행 본문입니다.
AuthServiceProvider
의 boot
메소드에서 인증을 정의합니다.
AuthServiceProvider
的 boot
方法里定义授权
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授权使用
Gate 门面:Gate::allows('update articles', $article)
和 Gate::denies('update articles', $article)
。
Controller 引入了
trait AuthorizesRequests
$this->authorize('update articles', $article)
。
Blade 模板:@can('update articles', $article)
和 @cannot('update articles', $article)
指令。
User Model 实例:$user->can('update articles', $article)
和 $user->cannot('update articles', $article)
。
Laravel Policy
为了方便地定义和使用授权,Laravel 在Gate的基础上引入了 Policy。policy内部的每一个方法,都会被用gate::define方法的描述注册。所以这就是为什么使用了策略类注册之后,即便没有用Gate门面定义授权逻辑,在控制器内仍然可以使用Gate::allow('策略类方法')的形式来进行授权判断 。
在 AuthServiceProvider
的 policies
数组属性里先定义授权映射关系
/** * 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; } } }
注意:
Policy 只是在普通 PHP 类基础上添加了一个 HandlesAuthorization
laravel 인증 사용
Gate::allows('update Articles', $article)
및 Gate::denies('update Articles', $article)
.
$this->authorize('update Articles', $article)
. 🎜@can('update Articles', $article)
및 @cannot('update Articles', $article)
지시어 . 🎜$user->can('update Articles', $article)
및 $user->cannot('update Articles' , $article)
. 🎜AuthServiceProvider
🎜rrreeerrreee🎜참고의 policies
배열 속성에서 인증 매핑 관계를 정의하세요. 🎜🎜Policy는 일반 정책만을 기반으로 합니다. PHP 클래스 HandlesAuthorization
특성을 추가했습니다. 🎜🎜정책에서는 모든 메소드가 실행되기 전에 호출되며 관리자 인증 로직을 처리하는 데 자주 사용됩니다. 🎜🎜🎜관련 권장 사항: 🎜🎜🎜gulp를 사용하여 Laravel에서 프런트 엔드 리소스를 구축하는 방법🎜🎜위 내용은 Laravel 권한 제어 게이트 정책의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!