2

我想使用管理员守卫来授权查看 laravel 地平线,但我必须以用户和管理员身份登录。

这是我的 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();
        });
    }
}

如果我以使用和管理员身份登录,它可以正常工作。但是,当我仅以管理员身份登录时,gate 的结果是:

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

感谢帮助

4

1 回答 1

2

对你来说可能太晚了,但对于其他搜索这个问题的人来说:

Laravel 假设您使用默认的“web”保护并且它正在注入经过身份验证的用户(因此它强制“web”保护检查)。

如文档中所述(请参阅大“!”注释),要强制 Laravel 不需要“web”保护身份验证,您只需指定$user = null,然后您可以实现任何您想要的。

所以你的情况下,类中的门函数HorizonServiceProvider应该是这样的:

protected function gate() {

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

}
于 2020-04-02T10:33:54.157 回答