php laravel授权能力检查参数太少

p8ekf7hl  于 2023-01-19  发布在  PHP
关注(0)|答案(2)|浏览(137)

刀片:

@can('see_similar', $similar, $in_pair)
...
@endcan

类AuthServiceProvider扩展服务提供程序:

public function boot()
{
    $this->registerPolicies();
    Gate::define('see_similar', function ($user, $similar, $in_pair) {
        return count($similar) > 0 && (isset($in_pair)) && $in_pair !== 'in_pair';
    });
}

它给我这个错误:
函数App\Providers\AuthServiceProvider::App\Providers {closure}()的参数太少,在第452行的/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Access/Gate.php中传入了2个参数,而实际上需要3个参数(查看:/var/www/html/resources/views/daters.blade.php)
虽然它的工作,如果我只传递一个参数"...函数($用户,$相似)",例如,我试图传递一个数组的参数,没有工作。
请向我解释如何传递几个参数。

c8ib6hqw

c8ib6hqw1#

来自文档:
Gates总是接收用户示例作为他们的第一个参数,并且可以选择接收其他参数,例如相关的Eloquent模型
您的问题是您向闭包函数传递了3个参数,您需要删除其中一个。

public function boot()
{
    $this->registerPolicies();
    // Here you MUST pass at most 2 parameters
    Gate::define('see_similar', function ($user, $ELOQUENT_MODEL) {
        return $what_you_want; // A boolean value
    });
}
ttcibm8c

ttcibm8c2#

Barmaxon你的boot()没问题!
如果您的路径包含->middleware('can:see_similar'),则需要选中web.php
我已经删除了它,然后可以传递许多变量:

public function abc()
    {
        $x=1;$y=2;
        $this->authorize('see_similar',[$x,$y]);
        return view('abc');
    }

相关问题