2017-05-13 4 views
2

인증 정책 중 하나가 올바르게 실행되는 데 문제가있어 인증 시도가 항상 false로 반환됩니다. 심지어는 테스트를 위해 함수가 true를 반환하도록 강요하고 있습니다. 내 기존 정책 등록에 CommentPolicy을 추가 한 내 AuthServiceProvider.php 파일Laravel 인증 정책이 호출되지 않음

public function can_modify_or_delete(User $user, Comment $comment) 
{ 
    return true; 
} 

: 나는 Laravel 5.4을 사용하고, 여기 내 정책 기능입니다.

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

이상한 점은 포스트 정책이 잘 작동한다는 것입니다. 댓글 하나가 등록되지 않거나 올바르게 호출되지 않는 것 같습니다. 내 경로에

:

Route::delete('/comments/{comment}', '[email protected]'); 

CommentsController

public function destroy(Request $request, Comment $comment) 
{ 
    $this->authorize('can_modify_or_delete', $comment); 
    $comment->delete(); 

    return response(['status' => 'Comment deleted'], 200); 
} 

불행하게도 어떤 문제에 어떤, 권한 부여 검사가 false를 반환한다. 내가 놓친 게 있니? 오타를 꽤 조심스럽게 확인했는데 찾을 수 없었습니다. 또한 경로 모델 바인딩이 의도 한대로 작동하고있어 리소스가 null이 아닌 것으로 확인되었습니다. 방침에 dd()을 시도했지만 전화를받지 못했습니다.

+0

경로가 미들웨어로 그룹화되어 있습니까? – Neat

+0

컨트롤러는'auth : api' 미들웨어를 사용합니다. 나는 권한 부여가 실행되기 직전에 컨트롤러 메소드에서'dd()'로 인증 된 사용자를 확보했음을 확인했다. –

+0

은 오류를 출력하지 않거나 작동하지 않습니다. 또한 true로 false로 변경하고 변경이 발생했는지 확인하십시오. – MohamedSabil83

답변

4

와우, 실제로 내 말에 오타였습니다 (전형적!). 그것이 즉 내 Comment 모델에서 실수로 내 네임 스페이스에 소문자 models을했다 :

가 있었어야
namespace App\models; 

는 :

namespace App\Models; 

에만 때문에 내가 가진 내 컨트롤러에서 가드 날 허를 :

use App\Models\Comment; 

destroy() 방법은 실제로 댓글로 채우는되었다 잘 작동했다 코멘트를 주입시킨다 표준. 정책 등록 경로는 use 성명보다 훨씬 정확해야합니다.

+1

@Colin 너무 이상합니다. 내 AuthServiceProvider.php에 내 모델에 대한 사용 문을 포함시키지 않았고 오류를 제공하지는 않았지만 작동하지 않았습니다 ... 제가 포함 시키 자마자 ... voila ... 당신이 적어도 저를 1 시간 구해 줬습니다 :) – AmrataB