【问题标题】:Laravel 5.4 policy check always falseLaravel 5.4 政策检查总是假的
【发布时间】:2019-01-01 23:42:24
【问题描述】:

所以我创建了一个策略并在 AuthServicePRvider 中注册它,但它总是返回 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]);
}

文章政策

public function view(Admin $admin, Article $article)
{
    return $admin->id == $article->username;
}

我正在尝试 == 和 === 但不起作用

此图像错误 403

【问题讨论】:

  • 您是否在AuthServiceProvider 中导入了ArticleArticlePolicy 类?
  • @Maraboc 他做了,看第一个代码块
  • @Quezler 我说导入我的意思是use App\Article:p
  • In ArticlePolicy use App\Model\Admin; use App\Model\Article;
  • 如果我没记错的话会在页面呈现之前抛出异常:)

标签: laravel policy


【解决方案1】:

您的策略已映射到模型类名。您必须有一个模型实例才能执行此操作。您的查询是直接使用查询生成器,而不是返回模型实例。

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

对于authorize,您希望将要授权的资源传递给authorize,而不是您最终将在策略中签入的资源属性:

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

// to

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

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

【讨论】:

  • 图像错误array:4 [ "ability" => "view" "result" => false "user" => 7 "arguments" => "[0 => Object(std
  • 我只是了解您之后发布的内容。在@Maraboc 帮助我之后非常感谢你们
猜你喜欢
  • 1970-01-01
  • 2021-12-24
  • 1970-01-01
  • 2021-04-05
  • 1970-01-01
  • 2012-03-13
  • 1970-01-01
  • 2021-06-05
  • 2021-02-13
相关资源
最近更新 更多