Laravel 5.4 策略检查总是错误的
Laravel 5.4 policy check always false
所以我创建了一个策略并在 AuthServicePROvider 中注册了它,但它总是 returns 错误。这是我第一次使用政策,所以我确定我做错了,但是按照几个例子,我没有任何效果。
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]);
}
文章政策
public function view(Admin $admin, Article $article)
{
return $admin->id == $article->username;
}
我正在尝试 == 和 === 但没有用
此图片错误403
您的策略已映射到模型类名。您必须有一个模型实例才能执行此操作。您的查询直接使用查询生成器而不返回模型实例。
$article = Article::....->first();
对于 authorize
,您想将要授权的资源传递给 authorize
,而不是您最终将签入策略的资源的属性:
$this->authorize('view', $article->username);
// to
$this->authorize('view', $article);
Gate 知道为资源使用策略的方式是因为传递的对象类型,或者传递的是类名。
所以我创建了一个策略并在 AuthServicePROvider 中注册了它,但它总是 returns 错误。这是我第一次使用政策,所以我确定我做错了,但是按照几个例子,我没有任何效果。
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]);
}
文章政策
public function view(Admin $admin, Article $article)
{
return $admin->id == $article->username;
}
我正在尝试 == 和 === 但没有用
此图片错误403
您的策略已映射到模型类名。您必须有一个模型实例才能执行此操作。您的查询直接使用查询生成器而不返回模型实例。
$article = Article::....->first();
对于 authorize
,您想将要授权的资源传递给 authorize
,而不是您最终将签入策略的资源的属性:
$this->authorize('view', $article->username);
// to
$this->authorize('view', $article);
Gate 知道为资源使用策略的方式是因为传递的对象类型,或者传递的是类名。