Laravel 政策正在解决奇怪的问题

Posted

技术标签:

【中文标题】Laravel 政策正在解决奇怪的问题【英文标题】:Laravel policies are resolving weird 【发布时间】:2017-01-24 21:47:31 【问题描述】:

我需要一个在锦标赛中创建树的策略。

所以,在我的 treeController@store 中,我有:

if (Auth::user()->cannot('generateTree', new Tree(),$tournament)) 
        throw new AuthorizationException();

而我相应的政策是:

TreePolicy.php

public function generateTree(Tree $tree, Tournament $tournament )

    dd($tournament);
    return ($tournament->user_id == Auth::user()->id);

我得到一个:

Type error: Argument 1 passed to App\Policies\TreePolicy::generateTree() must be an instance of App\Tree, instance of App\User given, called in /laravel/vendor/laravel/framework/src/Illuminate/Auth/Access/Gate.php on line 382

我错过了什么???

编辑:响应@andonovn,

我试过了:

public function store(User $user, Tree $tree, Tournament $tournament)

    dd($tournament);

还有

    if (Auth::user()->cannot('generateTree', Tree::class,$tournament)) 
        throw new AuthorizationException();
    

--> 它给了我一个 403

或者

$this->authorize('store',  $tournament,Tree::class);

--> 没有进入dd();

我发现它起作用的唯一方法是将策略内容放在不太好的控制器中:

if ($tournament->user_id != Auth::user()->id)
        throw new AuthorizationException();
    

编辑 2:我用它来解决它:

在控制器中:

if (Auth::user()->cannot('store', [Tree::class,$tournament])) 
        throw new AuthorizationException();
    

在政策中

public function store(User $user, Tournament $tournament)

    return ($tournament->user_id == $user->id);

【问题讨论】:

【参考方案1】:

我相信 generateTree() 的第一个参数必须是经过身份验证的用户。试试改成public function generateTree(User $user, Tree $tree, Tournament $tournament )

编辑: 还将cannot方法更改为Auth::user()->cannot('generateTree', [Tree::class, $tournament])(结合数组中的第二个和第三个参数,好像Laravel总是期望2个参数,其中第二个可以是数组)

【讨论】:

它运行良好,但我无法让它在视图中运行,@if (Auth::user()->can('store', [Tree::class, $tournament ])) 只是不工作 嗯,奇怪...您是否在保单上点击了 store 方法?尝试在那里转储,也许您传递的参数有些无效。还要检查您的应用程序和服务器错误日志中是否存在某种错误。这就是我会做的,我看不出从视图中调用它是如何工作的:/ 不,它没有进入我的策略......它只是拒绝访问,即使我是 root (我有一个 before() 方法可以在任何情况下授予对 root 的访问权限) oooo 我忘记了 App\ 之前:Tree::class,现在正在工作 :) 你可以考虑使用 IDE——它总是能保护你免受此类错误的影响;)

以上是关于Laravel 政策正在解决奇怪的问题的主要内容,如果未能解决你的问题,请参考以下文章

更新不起作用时 Laravel 保存(奇怪的行为)

laravel 雄辩的采摘与原始 concat 的奇怪行为

通过 PostCSS (Laravel Mix) 构建 Tailwind 时的奇怪输出

Laravel 5 选择查询将我的链接变成奇怪的格式

Laravel,axios:对服务器的第一个登录请求返回奇怪的数据 two_factor: false 而不是 Auth:id()。如何解决?

Laravel Wordpress JSON REST API 给出奇怪的 Curl 错误