我想使用adminguard来授权查看laravel地平线,但是我必须以用户身份和admin身份登录。
这是我的HorizonServiceProvider.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]"
]
感谢帮助
答案 0 :(得分:2)
对于您来说可能太少太迟了,但对于其他搜索该问题的人来说
Laravel假定您使用默认的“ Web”防护,并且正在注入经过身份验证的用户(因此它会强制执行“ Web”防护检查)。
如文档中所指定(请参见大的“!”注释),要强制Laravel不需要“网络”防护身份验证,您只需指定$user = null
,然后您就可以实现所需的任何功能。
因此,您在HorizonServiceProvider
类中的gate函数应该是这样的:
protected function gate() {
Gate::define('viewHorizon', function ($user = null) {
return Auth::guard('admin')->check();
});
}