代码之家  ›  专栏  ›  技术社区  ›  story ks

Laravel 5.4策略检查始终为假

  •  1
  • story ks  · 技术社区  · 7 年前

    因此,我创建了一个策略并在AuthServiceProvider中注册了它,但它总是返回false。这是我第一次与政策合作,因此我确信我做得不对,但下面举几个例子,没有什么对我有用。

    授权服务提供商

    受保护的$policies=[
    '应用程序\模型'=>'应用程序\策略\模型策略',
    文章::class=>文章策略::class,
    ;
    < /代码> 
    
    

    ArticleController@展会

    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')
    ->其中(“文章ID”,$文章ID)
    -gt;
    $this->authorize('view',$article->用户名);
    return view('admin.content.show article',['art'=>$article]);
    }
    < /代码> 
    
    

    条款政策

    公共功能视图(admin$admin,文章$article)
    {
    返回$admin->id=$article->用户名;
    }
    < /代码> 
    
    

    我试着==和==但不工作

    此图像错误403

    .

    授权服务提供商

    protected $policies = [
            'App\Model' => 'App\Policies\ModelPolicy',
            Article::class => ArticlePolicy::class,
        ];
    

    ArticleController@展会

    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

    1 回复  |  直到 7 年前
        1
  •  2
  •   lagbox    7 年前

    您的策略映射到模型类名。您必须有一个模型实例才能做到这一点。您的查询直接使用查询生成器,不返回模型实例。

    $article = Article::....->first();
    

    为了 authorize 要将要授权的资源传递给 授权 不是您最终将签入策略的资源的属性:

    $this->authorize('view', $article->username);
    
    // to
    
    $this->authorize('view', $article);
    

    gate甚至知道为资源使用策略的方式是因为传递的对象的类型,或者如果传递的是类名。