在NovaServiceProvider
中有:
protected function gate()
{
Gate::define('viewNova', function ($user) {
return in_array($user->email, [
'example@example.com',
]);
});
}
但是我想做的是只允许我在config/auth
中设置的管理员后卫访问Nova。理想情况下,网络防护的所有用户在访问任何Nova URL时都应获得404。
This question对于Telescope来说似乎很相似,但是我似乎无法弄清楚应该在哪里定义它,以及如何为Web Guard生成404。
一个可能相关的问题:viewNova
方法中的gate
到底是什么意思?
config/auth
中为特定后卫定义该特定动作吗? (我想我在某个地方见过这个,但似乎找不到)?答案 0 :(得分:0)
结帐vendor/laravel/nova/src/NovaApplicationServiceProvider.php
。它有一个称为authorization
的方法:
/**
* Configure the Nova authorization services.
*
* @return void
*/
protected function authorization()
{
$this->gate();
Nova::auth(function ($request) {
return app()->environment('local') ||
Gate::check('viewNova', [$request->user()]);
});
}
如果环境是本地环境,则允许所有人访问面板,但是如果环境是其他环境,则它将检查viewNova
方法上的定义,并将$request->user()
传递给它。 / p>
在同一文件中,有一种gate()
方法定义了viewNova
:
/**
* Register the Nova gate.
*
* This gate determines who can access Nova in non-local environments.
*
* @return void
*/
protected function gate()
{
Gate::define('viewNova', function ($user) {
return in_array($user->email, [
//
]);
});
}
基本上,此方法不执行任何操作。您可以在app/Providers/NovaServiceProvider.php
中实现它(这是您在文件中看到并已提到的默认实现)。就您而言,您可以通过以下方式实现它:
/**
* Register the Nova gate.
*
* This gate determines who can access Nova in non-local environments.
*
* @return void
*/
protected function gate()
{
Gate::define('viewNova', function ($user) {
Auth::guard('admin')->check();
});
}
如果当前经过身份验证的用户处于true
保护之下,它将返回admin
。希望我能回答您所有的问题。