Laravel Horizo​​n-具有不同后卫的大门

时间:2019-06-13 11:09:46

标签: php laravel laravel-horizon

我想使用adminguard来授权查看laravel地平线,但是我必须以用户身份和admin身份登录。

这是我的Horizo​​nServiceProvider.php代码

class HorizonServiceProvider extends HorizonApplicationServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        parent::boot();

        // Horizon::routeSmsNotificationsTo('15556667777');
        // Horizon::routeMailNotificationsTo('example@example.com');
        // Horizon::routeSlackNotificationsTo('slack-webhook-url', '#channel');

        // Horizon::night();
    }

    /**
     * Register the Horizon gate.
     *
     * This gate determines who can access Horizon in non-local environments.
     *
     * @return void
     */
    protected function gate()
    {
        Gate::define('viewHorizon', function () {
            return \Auth::guard('admin')->check();
        });
    }
}

如果我以使用的AND管理员身份登录,则可以正常运行。但是,当我仅以管理员身份登录时,gate的结果是:

array:4 [▼
  "ability" => "viewHorizon"
  "result" => null
  "user" => null
  "arguments" => "[0 => null]"
]

感谢帮助

1 个答案:

答案 0 :(得分:2)

对于您来说可能太少太迟了,但对于其他搜索该问题的人来说

Laravel假定您使用默认的“ Web”防护,并且正在注入经过身份验证的用户(因此它会强制执行“ Web”防护检查)。

如文档中所指定(请参见大的“!”注释),要强制Laravel不需要“网络”防护身份验证,您只需指定$user = null,然后您就可以实现所需的任何功能。

因此,您在HorizonServiceProvider类中的gate函数应该是这样的:

protected function gate() {

    Gate::define('viewHorizon', function ($user = null) {
        return Auth::guard('admin')->check();
    });

}