2017-11-26 4 views
0

를 사용하여 다른 사용자보기 게시물을 방지하는 것은이 같은 경로가 있습니다정책 Laravel 5.5

Route::get('{username}/posts','[email protected]')->name('post.editor'); 

내가 그들에게 속하지 않는 게시물을 볼 다른 편집기를 방지 할 수 있습니다. PostPolicy를 다음과 같이 만들려고했습니다.

public function view(User $user, Post $post) 
{ 
    return $user->id === $post->user_id || $user->hasRole('admin'); 
} 

내 PostController에서 사용자를 어떻게 인증 할 수 있습니까? 사용자 ID가 아닌 사용자 ID를 사용하기 때문에 정책을 올바르게 작성 했습니까? 감사.

답변

0

가 어떻게 사용자에게 권한을 부여 할 수 관련 링크입니다 Laravel 코드베이스의 실제 코드는?

권한 부여와 관련된 옵션이 있습니다. 컨트롤러에서 authorize으로 전화하거나 게이트를 호출하거나 FormRequest에서 authorize 메서드를 호출하거나 사용자 모델에서 can을 사용할 수 있습니다.

public function show(Request $request, Post $post) 
{ 
    // controller authorization helper 
    $this->authorize('view', $post); 
    // user authorization helper 
    if ($request->user()->cant('view', $post)) { 
     // return redirect/throw exception 
    } 
} 

하고 사용자 ID 사용자 이름을 사용하지 이후로는 제대로 정책을 썼는가?

이 정책 방법이 실행될 때까지 현재 사용자는 이미 인증되고 알려지며 게시는 인증 방법으로 전달됩니다. 인증 호출 전에 정책이 수행중인 게시 또는 기타 엔티티를 어떻게 해결할 필요가 있습니까?당신은 '관리'를 원하는 경우

이 허용하는 before 방법을 정의 할 수있는 정책에 대한 모든 권한 검사를 통과 할 수 있도록 :

public function before($user, $ability) 
{ 
    if ($user->hasRole('admin')) { 
     return true; 
    } 
} 

감사합니다.

안녕하십니까.

0

다음은 원하는 것을 달성하기 위해 따라야 할 단계입니다.

1) 일반적으로, 나는 장인이 만들 수 있습니다 당신은 수동으로 다음 정책을 등록 할 경우,

php artisan make:policy -m=Model 

그러나 다음 명령을 실행하여 나를 위해 정책 개체를 등록 할 것입니다, 당신은 그들을지도 할 필요가 당신의 AuthServiceProvider. 예 :

protected $policies = [ 
    'App\Post' => 'App\Policies\PostPolicy', 
]; 

2) 모델 정책에 이미 로직이 있습니다.

3) 컨트롤러의 editPost 액션에서 무엇보다 먼저 게시물을 볼 수있는 권한을 부여 할 수 있습니다. 예 :

$this->authorize('view', $post); 

4) 블레이드에서 @can 및 @endcan 블록에 액세스 할 수도 있습니다.

사용자 이름이나 사용자 ID 질문이가는 한 전체 사용자 개체에 액세스 할 수 있으므로 사용자가 속성을 사용하여 체크를 실행할 수 있습니다.

희망이 있습니다. 여기

/** 
* Determine if the given ability should be granted for the current user. 
* 
* @param string $ability 
* @param array|mixed $arguments 
* @return \Illuminate\Auth\Access\Response 
* 
* @throws \Illuminate\Auth\Access\AuthorizationException 
*/ 
public function authorize($ability, $arguments = []) 
{ 
    $result = $this->raw($ability, $arguments); 

    if ($result instanceof Response) { 
     return $result; 
    } 

    return $result ? $this->allow() : $this->deny(); 
} 

가 여기 내 PostController에서

https://laravel.com/docs/5.5/authorization#creating-policies https://laravel.com/docs/5.5/authorization#authorizing-actions-using-policies

+0

$ this-> authorize ('view', $ post); 당신이 쓴 것처럼, 그것은 사용자 변수가 필요하지 않습니다? 내가 필터링해야하기 때문에 게시물이이 사용자에게 속한 것입니다. – Ying

+0

사용자 모델을 정책 모델에 매핑하면 정책에서 사용자를 이미 얻었고 게시물의 경우 사용자가 해당 게시물을 전달하게됩니다. 공개 기능보기 (User $ user, Post $ post) { return $ user-> id === $ post-> user_id || $ user-> hasRole ('admin'); } – alithedeveloper