Laravel Nova 只能从特定守卫访问
Posted
技术标签:
【中文标题】Laravel Nova 只能从特定守卫访问【英文标题】:Laravel Nova only access from specific guard 【发布时间】:2019-04-06 07:07:57 【问题描述】:在NovaServiceProvider
中有:
protected function gate()
Gate::define('viewNova', function ($user)
return in_array($user->email, [
'example@example.com',
]);
);
但我想做的是只允许我在config/auth
中设置的管理员守卫 访问 Nova。理想情况下,来自 web Guard 的所有用户在访问任何 Nova URL 时都应该得到 404。
This question for Telescope 似乎很相似,但我似乎无法弄清楚我应该在哪里定义它,以及如何为 web Guard 生成 404。
一个可能相关的问题:gate
方法中的viewNova
究竟是什么意思?
config/auth
中的特定守卫定义该特定操作吗? (我想我在某处看到过,但似乎找不到)?
似乎没有针对 Nova 的政策?
【问题讨论】:
【参考方案1】:结帐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()
传递给它。
在同一个文件中,有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();
);
如果当前经过身份验证的用户在admin
守卫中,则返回true
。希望我能回答你所有的问题。
【讨论】:
以上是关于Laravel Nova 只能从特定守卫访问的主要内容,如果未能解决你的问题,请参考以下文章
在 Laravel 中使用多个守卫时,在注册/登录后设置默认守卫