Laravel에서 정책을 사용하여 사용자 인증을 완료하는 방법의 예

小云云
풀어 주다: 2018-03-13 14:47:46
원래의
2347명이 탐색했습니다.

Laravel은 사용자 인증 작업을 처리하는 더 간단한 방법을 제공합니다. 사용자 인증과 마찬가지로 Laravel에는 사용자 인증을 구현하는 두 가지 주요 방법인 게이트와 정책이 있습니다. 여기서 정책 사용을 기록하면 사용자 권한 부여가 완료됩니다.

정책 클래스 정의
정책 클래스 및 모델 연관 등록
정책 판단

정책 클래스 정의

정책은 특정 모델에서 권한을 구성하거나 리소스 논리 클래스. 예를 들어 애플리케이션이 블로그인 경우 블로그 생성이나 업데이트, 블로그 삭제와 같은 사용자 작업을 승인하는 Post 모델과 해당 PostPolicy가 있습니다.

이 시점에서 artisan 명령을 사용하여 정책 클래스를 생성할 수 있습니다. 다음 명령은 빈 Post 정책 클래스를 생성합니다

php artisan make:policy PostPolicy
로그인 후 복사
로그인 후 복사

생성된 정책은 app/Policies 디렉터리에 배치됩니다. 이 디렉터리가 애플리케이션에 존재하지 않으면 Laravel이 자동으로 디렉터리를 생성합니다

CURD가 포함된 정책 클래스를 생성하려면 다음 artisan 명령을 사용할 수 있습니다

php artisan make:policy PostPolicy --model=Post
로그인 후 복사
로그인 후 복사

정책 클래스 및 모델 연결 등록

정책 등록 AuthServiceProvider 클래스에서

    protected $policies = [        //'App\Model' => 'App\Policies\ModelPolicy',  这个是laravel中默认注册了的policy,可以模仿这个注册我们自己的policy        'App\Post' => 'App\Policies\PostPolicy', //注册Post的policy
    ];
로그인 후 복사
로그인 후 복사

정책 클래스와 모델 연결은 정책

<?phpnamespace App\Policies;use App\User;use App\Post;use Illuminate\Auth\Access\HandlesAuthorization;class PostPolicy{
    use HandlesAuthorization;    /**
     * Determine whether the user can update the post.
     *
     * @param  \App\User  $user
     * @param  \App\Post  $post
     * @return mixed
     */
    public function update(User $user, Post $post)
    {
        //
        return $user->id === $post->user_id;
    }    /**
     * Determine whether the user can delete the post.
     *
     * @param  \App\User  $user
     * @param  \App\Post  $post
     * @return mixed
     */
    public function delete(User $user, Post $post)
    {
        //
        return $user->id === $post->user_id;
    }
로그인 후 복사
로그인 후 복사

에 정책 메서드를 작성하는 것을 의미합니다. 업데이트 메서드는 User 및 Post 인스턴스를 매개 변수로 받아들이고 사용자가 업데이트할 권한이 있는지 여부를 나타내기 위해 true 또는 false를 반환해야 합니다. 주어진 게시물. 따라서 이번 예시에서는 사용자의 ID가 게시물의 user_id와 일치하는지 판단하고,

전략 판단

여기서 컨트롤러의 컨트롤러 보조 기능을 활용하여 정책 판단을 내립니다

//文章编辑逻辑
    public function update(Post $post)
    {
        $this->validate(request(),[            &#39;title&#39;      => &#39;required|String|min:5|max:50&#39;,            &#39;content&#39;    => &#39;required|String|min:10&#39;,
        ]);
        $this->authorize(&#39;update&#39;,$post);         ////////////////////策略判断
        $post->title = request(&#39;title&#39;);
        $post->content = request(&#39;content&#39;);
        $post->save();        return redirect("/posts/{$post->id}");
    }    //文章删除
    public function delete(Post $post)
    {        //TODO::权限验证
        $this->authorize(&#39;delete&#39;,$post);           //////////////////策略判断
        $post->delete();        return redirect(&#39;/posts&#39;);
    }
로그인 후 복사
로그인 후 복사

검증에 실패하는 한, laravel HttpException이 자동으로 발생합니다. 이 작업은 승인되지 않았습니다.

개발 중에 뷰의 편집 또는 수정 버튼과 같은 사용자 권한에 따라 일부 버튼을 표시할지 여부를 결정해야 할 수도 있습니다. @can을 사용하면 됩니다. 모델 버튼 표시 여부 지정

Laravel은 사용자 인증 작업을 처리하는 더 쉬운 방법을 제공합니다. 사용자 인증과 마찬가지로 Laravel에는 사용자 인증을 구현하는 두 가지 주요 방법인 게이트와 정책이 있습니다.

여기서 정책 사용을 기록하려면 정책을 사용하여 사용자 권한 부여를 완료하는 데 주로 3단계가 포함됩니다.

정책 클래스 정의
정책 클래스 및 모델 연결 등록
정책 판단

정책 클래스 정의

정책은 특정 모델 또는 리소스에 있습니다. 인증 로직을 구성하는 클래스입니다. 예를 들어 애플리케이션이 블로그인 경우 블로그 생성이나 업데이트, 블로그 삭제와 같은 사용자 작업을 승인하는 Post 모델과 해당 PostPolicy가 있습니다.

이 시점에서 artisan 명령을 사용하여 정책 클래스를 생성할 수 있습니다. 다음 명령은 빈 Post 정책 클래스를 생성합니다

php artisan make:policy PostPolicy
로그인 후 복사
로그인 후 복사

생성된 정책은 app/Policies 디렉터리에 배치됩니다. 이 디렉터리가 애플리케이션에 존재하지 않으면 Laravel이 자동으로 디렉터리를 생성합니다

CURD가 포함된 정책 클래스를 생성하려면 다음 artisan 명령을 사용할 수 있습니다

php artisan make:policy PostPolicy --model=Post
로그인 후 복사
로그인 후 복사

정책 클래스 및 모델 연결 등록

정책 등록 AuthServiceProvider 클래스에서

    protected $policies = [        //&#39;App\Model&#39; => &#39;App\Policies\ModelPolicy&#39;,  这个是laravel中默认注册了的policy,可以模仿这个注册我们自己的policy        &#39;App\Post&#39; => &#39;App\Policies\PostPolicy&#39;, //注册Post的policy
    ];
로그인 후 복사
로그인 후 복사

정책 클래스와 모델 간의 연결은 정책에 정책 메소드를 작성하는 것입니다.

<?phpnamespace App\Policies;use App\User;use App\Post;use Illuminate\Auth\Access\HandlesAuthorization;class PostPolicy{
    use HandlesAuthorization;    /**
     * Determine whether the user can update the post.
     *
     * @param  \App\User  $user
     * @param  \App\Post  $post
     * @return mixed
     */
    public function update(User $user, Post $post)
    {
        //
        return $user->id === $post->user_id;
    }    /**
     * Determine whether the user can delete the post.
     *
     * @param  \App\User  $user
     * @param  \App\Post  $post
     * @return mixed
     */
    public function delete(User $user, Post $post)
    {
        //
        return $user->id === $post->user_id;
    }
로그인 후 복사
로그인 후 복사

업데이트 메소드는 사용자 및 게시물 인스턴스를 매개변수로 허용하고 사용자가 사용자인지 여부를 나타내기 위해 true 또는 false를 반환해야 합니다. 해당 게시물을 업데이트할 권한이 있습니다. 따라서 이번 예시에서는 사용자의 ID가 게시물의 user_id와 일치하는지 판단하고,

전략 판단

여기서 컨트롤러의 컨트롤러 보조 기능을 활용하여 정책 판단을 내립니다

//文章编辑逻辑
    public function update(Post $post)
    {
        $this->validate(request(),[            &#39;title&#39;      => &#39;required|String|min:5|max:50&#39;,            &#39;content&#39;    => &#39;required|String|min:10&#39;,
        ]);
        $this->authorize(&#39;update&#39;,$post);         ////////////////////策略判断
        $post->title = request(&#39;title&#39;);
        $post->content = request(&#39;content&#39;);
        $post->save();        return redirect("/posts/{$post->id}");
    }    //文章删除
    public function delete(Post $post)
    {        //TODO::权限验证
        $this->authorize(&#39;delete&#39;,$post);           //////////////////策略判断
        $post->delete();        return redirect(&#39;/posts&#39;);
    }
로그인 후 복사
로그인 후 복사

검증에 실패하는 한, laravel HttpException이 자동으로 발생합니다. 이 작업은 승인되지 않았습니다.

개발 중에 뷰의 편집 또는 수정 버튼과 같은 사용자 권한에 따라 일부 버튼을 표시할지 여부를 결정해야 할 수도 있습니다. 모델 버튼 표시 여부를 지정합니다.

위 내용은 Laravel에서 정책을 사용하여 사용자 인증을 완료하는 방법의 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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