수색…


소개

Laravel은 특정 리소스에 대한 사용자 작업을 인증하는 간단한 방법을 제공합니다. 권한 부여를 사용하면 특정 리소스에 대한 사용자 액세스를 선택적으로 허용하면서 다른 사용자에 대한 액세스는 거부 할 수 있습니다. Laravel은 GatesPolicies 을 사용하여 사용자 권한을 관리하기위한 간단한 API를 제공합니다. GatesAuthServiceProvider 를 사용하여 인증에 대한 간단한 클로저 기반 접근 방식을 제공하고 Policies 사용하면 클래스를 사용하여 모델 주위에 권한 부여 논리를 구성 할 수 있습니다.

게이츠 사용

Gates 는 사용자가 리소스에 대해 특정 작업을 수행 할 수 있는지 여부를 결정하는 클로저입니다. Gates 는 일반적으로 AuthServiceProvider 의 부팅 메서드에 정의되어 있으며 수행중인 작업을 반영하기 위해 간결하게 이름이 지정됩니다. 프리미엄 사용자 만 일부 콘텐츠를 볼 수있는 게이트의 예는 다음과 같습니다.

Gate::define('view-content', function ($user, $content){
    return $user->isSubscribedTo($content->id);
});

Gate 항상 첫 번째 인수로 사용자 인스턴스를받습니다. 게이트를 사용할 때 게이트를 전달할 필요가 없으며 선택적으로 관심있는 웅변 모형과 같은 추가 인수를 선택적으로 수신 할 수 있습니다.

게이트를 사용하여 권한 부여 작업

블레이드 템플릿에서 위의 예를 사용하여 사용자의 콘텐츠를 숨기려면 일반적으로 다음과 같이하십시오.

@can('view-content', $content)
 <! -- content here -->
@endcan

콘텐츠 탐색을 완전히 방지하려면 컨트롤러에서 다음을 수행 할 수 있습니다.

if(Gate::allows('view-content', $content)){
    /* user can view the content */
}

        OR

if(Gate::denies('view-content', $content)){
    /* user cannot view content */
}

참고 : 현재 인증 된 사용자를 이러한 방법으로 전달할 필요는 없지만 Laravel이이를 처리합니다.

정책

정책은 모델 자원에 대한 권한 부여 논리를 구성하는 데 도움이되는 클래스입니다. 이전 예제를 사용하여 Content Model에 대한 사용자 액세스를 관리하는 ContentPolicy 가있을 수 있습니다.

ContentPolicy 를 만들기 위해 laravel은 숙련 된 명령을 제공합니다. 단순히 실행

php artisan make:policy ContentPolicy

그러면 빈 정책 클래스가 만들어져 app/Policies 폴더에 저장됩니다. 폴더가 없으면 Laravel이 폴더를 만들어 클래스를 내부에 배치합니다.

생성 된 정책은 Laravel이 모델에서 동작을 인증 할 때 사용할 정책을 알 수 있도록 등록해야합니다. 모든 Laravel 설치와 함께 제공되는 Laravel의 AuthServiceProvider 에는 웅변 모델을 인증 정책에 매핑하는 policies 속성이 있습니다. 배열에 매핑을 추가하기 만하면됩니다.

protected $policies = [
    Content::class => ContentPolicy::class,
 ];

작문 정책

작문 PoliciesGates 작문과 거의 같은 패턴입니다. 콘텐트 허가 게이트는 다음과 같은 정책으로 재 작성 될 수 있습니다 :

function view($user, $content)
{
    return $user->isSubscribedTo($content->id);
}

정책에는 모델에 대한 모든 권한 부여 케이스를 관리하는 데 필요한 더 많은 메소드가 포함될 수 있습니다.

정책으로 작업 승인

사용자 모델을 통해

Laravel User 모델에는 Policies 사용하는 권한 부여를 돕는 두 가지 방법이 있습니다. can 있고 can't . 이 두 가지를 사용하여 사용자가 모델에 대해 권한을 갖고 있는지 여부를 확인할 수 있습니다.

사용자가 콘텐츠를 볼 수 있는지 여부를 확인하려면 다음을 수행 할 수 있습니다.

if($user->can('view', $content)){
    /* user can view content */
}

        OR

if($user->cant('view', $content)){
    /* user cannot view content */
}

미들웨어를 통해

Route::get('/contents/{id}, function(Content $content){
    /* user can view content */
})->middleware('can:view,content');

비아 컨트롤러

Laravel은 도우미 메서드라는 제공 authorize 정책 및 인수와 관련된 모델의 이름을 사용하고 두 권한을 부여 작업을 권한 부여 논리에 기반 또는 작업을 거부하고 발생 AuthorizationException Laravel 예외 핸들러가로 변환 403 HTTP response .

pubic function show($id)
{
    $content = Content::find($id);

    $this->authorize('view', $content);
        
    /* user can view content */
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow