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 只能从特定守卫访问的主要内容,如果未能解决你的问题,请参考以下文章

php 具有自定义访问器的Laravel Nova用户资源

启用某些角色以访问Laravel Nova仪表板?

在 Laravel 中使用多个守卫时,在注册/登录后设置默认守卫

将 Laravel Nova 移至子域

从 Laravel 中的 .env 获取 .data 到 Laravel Nova Card - vue 组件

有没有办法在 Laravel 中为 Nova 资源显式定义策略?