Laravel 권한 제어 게이트 정책

不言
풀어 주다: 2023-03-29 18:48:01
원래의
2204명이 탐색했습니다.

이 글은 주로 Laravel 권한 제어 Gate 정책을 소개하는데, 이는 특정 참고 가치가 있습니다. 이제는 모든 사람과 공유합니다. 필요한 친구들이 참고할 수 있습니다.

권한에 대하여

본질적으로는 실행 가능한 논리에 대한 설명입니다. 단위 생산 개시 여부를 결정합니다.

정의 사용자 인스턴스 또는 고유 식별 매개변수와 이에 연결된 사용 리소스가 있어야 합니다. 일반적으로 클로저나 함수 또는 메서드를 사용하여 권한 논리 단위 핸들, 매개변수 권한 작업 개체 및 사용자 정보를 호출합니다.

Origin

가장 기본적인 권한 제어, 삼항 연산자? :. 분명히 조건부 판단을 한 다음 해당 실행 논리로 점프합니다.

Laravel의 아이디어는 실행 로직(생산 코드)과 승인(조건부 판단 로직)을 분리하는 것입니다. 조건 생성에 중점을 두고 일반적으로 권한 부여 논리를 강화합니다(복잡한 권한 부여에 매우 유용함). 가정: 모든 코드는 서비스 등록이 완료된 후 시작됩니다. 그러면 다음과 같은 코드가 등록됩니다. 그 목적은 진정으로 판단을 승인하는 논리적 본체를 찾는 것입니다.

Gate::define('update articles', 'ArticlePolicy@update')
로그인 후 복사

첫 번째 매개변수는 분명히 인증 식별자(호출에 사용되는 핸들 매개변수)이고, 두 번째 매개변수는 인증된 논리적 실행 본문입니다.


laravel 인증 정의

AuthServiceProviderboot 메소드에서 인증을 정의합니다.

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授权使用

  1. Gate 门面:Gate::allows(&#39;update articles&#39;, $article)Gate::denies(&#39;update articles&#39;, $article)

  2. Controller 引入了

    trait AuthorizesRequests

    $this->authorize(&#39;update articles&#39;, $article)

  3. Blade 模板:@can(&#39;update articles&#39;, $article)@cannot(&#39;update articles&#39;, $article) 指令。

  4. User Model 实例:$user->can(&#39;update articles&#39;, $article)$user->cannot(&#39;update articles&#39;, $article)

Laravel Policy

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

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

/**
 * 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

rrreeerrreee


laravel 인증 사용

  1. Gate 외관: Gate::allows('update Articles', $article)Gate::denies('update Articles', $article) .

  2. 컨트롤러는 특성 AuthorizesRequests🎜🎜$this->authorize('update Articles', $article). 🎜
  3. 🎜Blade 템플릿: @can('update Articles', $article)@cannot('update Articles', $article) 지시어 . 🎜
  4. 🎜사용자 모델 인스턴스: $user->can('update Articles', $article)$user->cannot('update Articles' , $article). 🎜
🎜🎜Laravel Policy🎜🎜🎜🎜인증을 쉽게 정의하고 사용할 수 있도록 Laravel에서는 Gate 기반 정책을 도입합니다. 정책 내의 각 메소드는 Gate::define 메소드 설명과 함께 등록됩니다. 따라서 정책 클래스 등록을 사용한 후 권한 부여 논리가 Gate 파사드로 정의되지 않은 경우에도 컨트롤러에서 Gate::allow('strategy class method') 형식을 사용하여 권한 부여 판단을 수행할 수 있습니다. 🎜🎜🎜먼저 AuthServiceProvider🎜rrreeerrreee🎜참고policies 배열 속성에서 인증 매핑 관계를 정의하세요. 🎜🎜Policy는 일반 정책만을 기반으로 합니다. PHP 클래스 HandlesAuthorization 특성을 추가했습니다. 🎜🎜정책에서는 모든 메소드가 실행되기 전에 호출되며 관리자 인증 로직을 처리하는 데 자주 사용됩니다. 🎜🎜🎜관련 권장 사항: 🎜🎜🎜gulp를 사용하여 Laravel에서 프런트 엔드 리소스를 구축하는 방법🎜🎜

위 내용은 Laravel 권한 제어 게이트 정책의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿