Laravel5.1.11에 추가된 Gate 시도(하나)
개요
Laravel5.1.11 사용자 권한 관리가 잘 되어 있기 때문에 Gate는 옵션이 추가된 것 같습니다.
상응하는 공식 문서는 여기에 있다
Authorization
공식 문서를 이해하고 소스를 간단하게 본 느낌은 다음과 같다.
1. routes.php와 비슷한 요령AuthServiceProvider
에 따라 정책을 정의할 수 있습니다.
2. Gate fathod 검사 권한 등이 필요한 곳에 정의된 정책을 사용합니다.
3. Policy를 사용할 때 User 모드에서 xxxx 작업에 대한 정책을 xxxPolicy로 정의할 것 같습니다.
4. 로그인하지 않은 경우(User 비어 있음) 지정된 정책에 도달하기 전에 휴가를 반환합니까?
Policy 파일을 각 객체의 괄호로 분할하여
정책의 코드가 흐트러지지 않고 정리될 수 있을까, 권한 검사 논리가 쉽게 app/Policies
보면 되는 단순한 상태가 될까
용도
화면 관리 등 흔한 열람만~추가 편집 가능 등 Role
앞쪽에서도 자신이 쓴 평론만 편집할 수 있다.
특히 권한 검사가 복잡해지기 쉬운 곳,
같은 콘텐츠에 대해 CRUD의 사람이 다른 상황에서 하나의 폴리시 클래스가 쉽게 귀납되는 장점을 느낄 수 있다.
권한 검사의 부분은 완전히 분리되고 테스트도 쉬워질 것 같아서 의미가 있다.
따라서 우선 흔한 패턴을 준비해 사용해야 한다.
환경 및 시작 전 상태
Laavel5.1.12 상태에 들어간다.
이번 기능은 5.1.1에 추가됐지만 버그픽스는 곧 5.1.2로 바뀌었다.
5.1.1 업그레이드하기
공식적인 업그레이드 지침을 보니 매우 빠르다.(영어)
http://laravel.com/docs/5.1/upgrade
이번 시험 샘플의 필요 조건
대략적으로 제작된 흔한 상황의 샘플을 사용하여 다음과 같은 조건으로 활용해 보세요.
화면 관리 등 흔한 열람만~추가 편집 가능 등 Role
앞쪽에서도 자신이 쓴 평론만 편집할 수 있다.
특히 권한 검사가 복잡해지기 쉬운 곳,
같은 콘텐츠에 대해 CRUD의 사람이 다른 상황에서 하나의 폴리시 클래스가 쉽게 귀납되는 장점을 느낄 수 있다.
권한 검사의 부분은 완전히 분리되고 테스트도 쉬워질 것 같아서 의미가 있다.
따라서 우선 흔한 패턴을 준비해 사용해야 한다.
환경 및 시작 전 상태
Laavel5.1.12 상태에 들어간다.
이번 기능은 5.1.1에 추가됐지만 버그픽스는 곧 5.1.2로 바뀌었다.
5.1.1 업그레이드하기
공식적인 업그레이드 지침을 보니 매우 빠르다.(영어)
http://laravel.com/docs/5.1/upgrade
이번 시험 샘플의 필요 조건
대략적으로 제작된 흔한 상황의 샘플을 사용하여 다음과 같은 조건으로 활용해 보세요.
대략적으로 제작된 흔한 상황의 샘플을 사용하여 다음과 같은 조건으로 활용해 보세요.
사용자
포스트
Comment= 참고 사항
일단 포스트부터 만들겠습니다.
우선 관련 보도 부분에서 권한을 추가한다.
포스트폴리시 만들기
아래의 지령은artisan을 사용하여 모형을 만들 수 있으며, 할 수 있는 것은 구조기만 있다.composer create-project
서류는 php artisan make:policy PostPolicy
에서 제작되었다.
생성된 초기 형태를 위해'문장'의 요구를 충족시키는 다음과 같은method를 추가합니다
PostPolicy.php
/**
* 1. 登録ユーザーがログインすることで「記事」を投稿できる。
* @return bool
*/
public function create()
{
return true;
}
/**
* 2. 自分が投稿した「記事」は編集が可能。
* @param User $user
* @param Post $post
* @return bool
*/
public function update(User $user, Post $post)
{
return $user->id == $post->user_id;
}
/**
* 3. 自分が投稿した「記事」は削除が可能。
* @param User $user
* @param Post $post
* @return bool
*/
public function delete(User $user, Post $post)
{
return $user->id == $post->user_id;
}
PostPolicy용 AuthServiceProvider 설정
app/Policies
에 설정된 Policy.폴리시 등급이 만들어진다면
AuthServiceProvider
에 추가하겠다.키는 대상 클래스 이름으로 설정해야 합니다.
실제 코드 샘플
AuthServiceProvider.php
protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
Post::class => PostPolicy::class,
];
PostPolicy 사용
이번엔 그냥 어떤 느낌으로 쓸지 간단하게 컨트롤러로 해보는 거야.
$policies
에서 객체로 제공되는 클래스 이름 읽기,이전
denies
의 AuthServiceProvider
배열키에 설정된 policies
를 자동으로 읽습니다.이런 느낌으로 여기저기 쫓아다니면서
실제 코드 샘플
PostController.php
if (Gate::denies('update', $this->post)) {
return redirect('/post')->with('message', '編集できるのは投稿者と管理者のみです。');
}
권한의 상태에 따라 글의 편집/삭제 단추의 표시를 제어합니다.
권한이 없는 사용자에게 편집/삭제 단추를 표시하는 것도 방해일 뿐입니다.
편집, 삭제 단추를 권한에 따라 최대한 많은 내용을 표시합니다.
이룰 수 있는 방법도 준비해 주셔서 감사하게 사용하고 있습니다.
실제 샘플 코드
index.blade.php
@can('update', $post)
<a href="/post/{{ $post->id }}/edit" class="btn btn-primary">
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span> 編集
</a>
@endcan
@can('delete', $post)
<button class="btn btn-danger" data-toggle="modal" data-target="#exampleModal" data-whatever="/post/{{ $post->id }}">
<span class="glyphicon glyphicon-trash" aria-hidden="true"></span> 削除
</button>
@endcan
추가된 Policy
를 사용하면 php 측의 방법을 사용할 수 있습니다.스크쇼크도 따 봤어요.
엔지니어로 로그인했기 때문에, 'phper' 의 글에는 편집 삭제 단추가 표시되지 않습니다.
길어졌기 때문에 여기서 격리한다
다음에는 평론 부분의 실례로 써 보세요.
썼어.
Laravel5.1.11에 추가된 Gate 시도
http://qiita.com/inaka_phper/items/c584904bb39673e2dc16
둘째, 주로 여러 값을 Policy에 전달하는 방법입니다.
추가@can
에 대한 정의 방법, AuthServiceProvider
와 $gate->before()
에 대해서도 샘플을 만들어 보고 싶습니다.
Reference
이 문제에 관하여(Laravel5.1.11에 추가된 Gate 시도(하나)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/inaka_phper/items/653820a75d1a9c716f0e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Laravel5.1.11에 추가된 Gate 시도(하나)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/inaka_phper/items/653820a75d1a9c716f0e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)