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 知道为资源使用策略的方式是因为传递的对象类型,或者传递的是类名。