因此,我创建了一个策略并将其注册在AuthServicePRovider中,但是它始终返回false。这是我第一次使用政策,因此我确定我做错了,但是下面的几个例子对我没有任何帮助。
AuthServiceProvider
protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
Article::class => ArticlePolicy::class,
];
ArticleController @ show
public function show($article_id) I
{
$article = DB::table('pjt_article as a')
->join('pjt_categories_article as c', 'a.cate_id', '=', 'c.cate_id')
->where('article_id', $article_id)
->first();
$this->authorize('view', $article->username);
return view('admin.content.show-article', ['art' => $article]);
}
ArticlePolicy
public function view(Admin $admin, Article $article)
{
return $admin->id == $article->username;
}
我正在尝试==和===,但无法正常工作
此图片错误403
答案 0 :(得分:2)
您的策略已映射到Model类名。您必须具有一个模型实例才能执行此操作。您的查询直接使用查询生成器,而不返回模型实例。
$article = Article::....->first();
对于authorize
,您想将您要授权的资源传递给authorize
,而不是最终要在策略中签入资源的属性:
$this->authorize('view', $article->username);
// to
$this->authorize('view', $article);
Gate知道甚至对资源使用策略的方式是因为所传递的对象的类型,或者是否传递了类名。