Laravel授权政策未被调用

Col*_*son 3 php authorization policies laravel

我无法让我的某个auth策略正常运行,导致授权尝试始终返回false.我甚至只是为了测试而强制函数返回true.我正在使用Laravel 5.4,这是我的政策功能:

public function can_modify_or_delete(User $user, Comment $comment)
{
    return true;
}
Run Code Online (Sandbox Code Playgroud)

在我的AuthServiceProvider.php文件中,我已添加CommentPolicy到我现有的政策注册中.

protected $policies = [
    'App\Models\Post' => 'App\Policies\PostPolicy',
    'App\Models\Comment' => 'App\Policies\CommentPolicy',
];
Run Code Online (Sandbox Code Playgroud)

奇怪的是,该政策一直运作得很好.注释似乎没有被注册或没有被正确调用.

在我的路线:

Route::delete('/comments/{comment}', 'CommentsController@destroy');
Run Code Online (Sandbox Code Playgroud)

并在 CommentsController

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

    return response(['status' => 'Comment deleted'], 200);
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,无论如何,授权检查都返回false.我错过了什么吗?仔细检查错别字,找不到任何错误.我还确认路由模型绑定正在按预期工作,因此它不是空资源问题.我尝试dd()了这个政策,甚至没有被召唤.

Col*_*son 6

哇,所以它实际上是我的一个错字(典型!).在我的Comment模型中,我意外地models在命名空间中使用了小写,即它是:

namespace App\models;
Run Code Online (Sandbox Code Playgroud)

应该是什么时候:

namespace App\Models;
Run Code Online (Sandbox Code Playgroud)

这只让我措手不及,因为在我的控制器中我有:

use App\Models\Comment;
Run Code Online (Sandbox Code Playgroud)

并且该destroy()方法注入一个实际工作正常的注释,注释正常填充.似乎政策登记路径必须比use声明更精确.

  • @Colin 这太奇怪了。我没有在我的 AuthServiceProvider.php 中包含我的模型的 use 语句,从来没有给出任何错误但没有工作......一旦我包含它......瞧......你至少为我节省了一个小时:) (2认同)