Laravel Nova仅可从特定后卫访问

时间:2019-04-06 07:07:58

标签: laravel laravel-nova

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中为特定后卫定义该特定动作吗? (我想我在某个地方见过这个,但似乎找不到)?
  • 似乎没有针对Nova的政策?

1 个答案:

答案 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。希望我能回答您所有的问题。