Laravel5.1.11에 추가된 Gate 시도
개요
Laravel5.1.11에 추가된 게이트(의 1)의 계속을 시도해 보자.
http://qiita.com/inaka_phper/items/653820a75d1a9c716f0e
이번에는 댓글의 다음 조건을 충족시키기 위해서.
Policy를 사용하여 구현된 섹션에 대해서는 샘플을 통해 설명합니다.
4~6,8 포스트와 함께 있으니 7이 주는 대상과 논리가 늘어났다는 느낌이 든다.
댓글 파트 만들기.
기본적으로 포스트와 같기 때문에 동작과 포스트가 다른 부분
7. 자신의 기사에 기고한 다른 사용자의 평론을 삭제할 수 있다.delete를 실현하는 부분을 주로 설명합니다.
CommentPolicy delete 만들기
7. 자신의 기사에 기고한 다른 사용자의 평론을 삭제할 수 있다.자신의 기사
해당 포스트도 함께 수락한다.
받아들이는 값을 늘리려면 단순히 파라미터를 늘리면 될 것 같다.
Comment에서 Post를 끌어올 수도 있지만 Policy에서 SQL이 발매되면 다방면으로 불릴 수 있음을 감안하면
쓸모없는 SQL이 늘고 의존도도 높아진 만큼 필요한 대상의 실현을 받아들이는 게 좋지 않을까 생각한다.
실제 샘플 코드
CommentPolicy.php /**
* 6. 自分が投稿した「コメント」は削除が可能。
* 7. 投稿された「記事」と「コメント」は非ログインユーザーでも閲覧は可能。
* @param User $user
* @param Post $post
* @param Comment $comment
* @return bool
*/
public function delete(User $user, Comment $comment, Post $post)
{
return $user->id == $post->user_id || $user->id == $comment->user_id;
}
공통 Policy용 AuthServiceProvider 설정
Post에는 AuthServiceProvider도 있습니다.php에 쓰세요.
AuthServiceProvider.php protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
Post::class => PostPolicy::class,
Comment::class => CommentPolicy::class,
];
CommentPolicy를 사용한 delete(User, Commonent, Post)
delete에서 파라미터가 증가하기 때문에 Post
의 대상을 추가로 그에게 건네주어야 한다.
폴리시가 매개 변수를 추가했기 때문에'그에게 맡겨 늘렸으면 좋겠다'는 자세를 취해 배열된 형태로 건네줘야 한다.
가장 먼저 Policy의 키를 읽으러 왔기 때문에 배열의 순서에 주의해야 한다.
순서가 틀리면, 검사는 잘못된 delete로 진행됩니다.
이번에CommentPolicy
니까 먼저Comment
내세요.
실제 샘플 코드
PostCommentController.php if (Gate::denies('delete', [$this->comment, $this->post])) {
return redirect('/post/' . $this->post->id)->with('message', '削除できるのは投稿者と記事の投稿者、管理者のみです。');
}
사용 권한의 상태에 따라 디스플레이를 제어합니다.
매개변수가 추가된 CommentPolicy의 delete를 사용하는 경우
Controller의 설명에 따라 다음과 같이 배송됩니다.
이쪽도 순서에 유의해야 한다.
실제 샘플 코드
show.blade.php @can('delete', [$comment, $post])
<button class="btn btn-danger" data-toggle="modal" data-target="#exampleModal" data-whatever="/post/{{ $post->id }}/comment/{{ $comment->id }}">
<span class="glyphicon glyphicon-trash" aria-hidden="true"></span> 削除
</button>
@endcan
나는 로그인하지 않은 상태에서 주석 투고 형식을 입력할 수 없다고 생각한다@can
도 사용할 수 있는@else
로 분류
show.blade.php @can('create', $post)
<form class="form-horizontal" role="form" method="POST" action="{{ url('/post/' . $post->id . '/comment') }}">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<input type="hidden" name="_method" value="POST">
<div class="form-group">
<div class="col-md-5">
<textarea name="content" class="form-control">{{ old('content') }}</textarea>
</div>
<div class="col-md-2">
<button type="submit" class="btn btn-primary">
投稿
</button>
</div>
</div>
</form>
@else
<p>コメントを投稿するには <a href="/auth/login">ログイン</a>してください。</p>
@endcan
결국 화면에는 이런 느낌이 든다.
여기도 일단락.
다음에는 비포어를 사용한 관리자이기 때문에 무엇이든 OK하는 설치 방법을 시도해 보세요.
Laravel5.1.11에 추가된 Gate 시도(3)
http://qiita.com/inaka_phper/items/09e730bf5a0abeb9e51a
Reference
이 문제에 관하여(Laravel5.1.11에 추가된 Gate 시도), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/inaka_phper/items/c584904bb39673e2dc16
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
/**
* 6. 自分が投稿した「コメント」は削除が可能。
* 7. 投稿された「記事」と「コメント」は非ログインユーザーでも閲覧は可能。
* @param User $user
* @param Post $post
* @param Comment $comment
* @return bool
*/
public function delete(User $user, Comment $comment, Post $post)
{
return $user->id == $post->user_id || $user->id == $comment->user_id;
}
protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
Post::class => PostPolicy::class,
Comment::class => CommentPolicy::class,
];
if (Gate::denies('delete', [$this->comment, $this->post])) {
return redirect('/post/' . $this->post->id)->with('message', '削除できるのは投稿者と記事の投稿者、管理者のみです。');
}
@can('delete', [$comment, $post])
<button class="btn btn-danger" data-toggle="modal" data-target="#exampleModal" data-whatever="/post/{{ $post->id }}/comment/{{ $comment->id }}">
<span class="glyphicon glyphicon-trash" aria-hidden="true"></span> 削除
</button>
@endcan
@can('create', $post)
<form class="form-horizontal" role="form" method="POST" action="{{ url('/post/' . $post->id . '/comment') }}">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<input type="hidden" name="_method" value="POST">
<div class="form-group">
<div class="col-md-5">
<textarea name="content" class="form-control">{{ old('content') }}</textarea>
</div>
<div class="col-md-2">
<button type="submit" class="btn btn-primary">
投稿
</button>
</div>
</div>
</form>
@else
<p>コメントを投稿するには <a href="/auth/login">ログイン</a>してください。</p>
@endcan
다음에는 비포어를 사용한 관리자이기 때문에 무엇이든 OK하는 설치 방법을 시도해 보세요.
Laravel5.1.11에 추가된 Gate 시도(3)
http://qiita.com/inaka_phper/items/09e730bf5a0abeb9e51a
Reference
이 문제에 관하여(Laravel5.1.11에 추가된 Gate 시도), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/inaka_phper/items/c584904bb39673e2dc16텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)