Laravel5.1.11에 추가된 Gate 시도

7411 단어 PHPLaravel

개요


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

    좋은 웹페이지 즐겨찾기