2017-05-13 9 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]'); 

とその認可チェックがfalseを返すされているもの、CommentsController

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

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

で残念ながらどんなに。何か不足していますか?タイプミスがきれいにチェックされ、見つからなかった。また、ルートモデルのバインディングが意図したとおりに動作していることを確認したため、ヌルリソースの問題ではありません。私はポリシーでdd()を試しましたが、それは呼び出されていません。

+0

ルートはミドルウェアの下でグループ化されていますか? – Neat

+0

コントローラは 'auth:api'ミドルウェアを使用します。私は認証されたユーザが、権限が実行される直前にコントローラメソッドで 'dd()'することでそれを確認しました。 –

+0

はエラーを出力していないか、動作していません。また、真に偽に変更し、変更が発生したかどうかを確認してください。 – MohamedSabil83

答えて

4

うわー、実際に私の最後に典型的なタイプミスでした。それがあった。すなわち、私のCommentモデルでは、私は偶然、私の名前空間で小文字modelsを持っていた:

それはされている必要があります
namespace App\models; 

は:

namespace App\Models; 

これが唯一の理由は、私が持っていた私のコントローラでガードを私を突か:

use App\Models\Comment; 

destroy()方法は、実際に、コメントのように移入された罰金働いていたコメントを、注入正常。ポリシーの登録パスはuseよりはるかに正確でなければなりません。

+1

@Colinとても奇妙です。私はAuthServiceProvider.phpに自分のモデルのuseステートメントを含めておらず、エラーを出すことはありませんでしたが、動作していませんでした...私がそれを組み込むとすぐに... voila ...あなたは少なくとも私を1時間節約しました:) – AmrataB

関連する問題