我无法让我的某个auth策略正常运行,导致授权尝试始终返回false.我甚至只是为了测试而强制函数返回true.我正在使用Laravel 5.4,这是我的政策功能:
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}', 'CommentsController@destroy');
并在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(),甚至没有被调用.
解决方法:
哇,所以它实际上是我的一个错字(典型!).在我的评论模型中,我意外地在我的命名空间中有一个小写模型,即它是:
namespace App\models;
应该是什么时候:
namespace App\Models;
这只让我措手不及,因为在我的控制器中我有:
use App\Models\Comment;
而destroy()方法注入一个注释,实际上工作正常,注释正常填充.政策注册路径似乎必须比使用声明更精确.