2017-05-13 96 views
2

我無法讓我的某個授權策略正常運行,導致授權嘗試始終返回false。爲了測試,我甚至強迫函數返回true。我使用Laravel 5.4,這是我的策略功能:Laravel授權政策未被調用

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

在我AuthServiceProvider.php文件我已經添加了CommentPolicy我的現行政策登記。

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。我錯過了什麼嗎?仔細檢查是否有錯別字,並找不到任何錯誤。我也確認了路由模型綁定正在按預期工作,因此它不是空資源問題。我在策略中嘗試了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中包含我的模型的使用聲明,從未給出任何錯誤,但沒有工作......一旦我包含它......瞧......你至少救了我一個小時:) – AmrataB