【问题标题】:Enabling certain roles to access Laravel Nova dashboard?允许某些角色访问 Laravel Nova 仪表板?
【发布时间】:2019-02-16 11:03:00
【问题描述】:

我安装了 Spatie Permissions 包,并创建了策略来限制使用此包的模型的访问权限。

但是,我在创建一个门以启用某些角色(例如“管理员”和“内容编辑器”)访问 Nova 仪表板时遇到了一些困难?

我认为它会涉及 NovaServiceProvider 中的 gate() 函数。这是我尝试过的。

   protected function gate()
    {
        Gate::define('viewNova', function ($user) {
             if ($user->hasRole('Admin') || $user->hasRole('Content Editor'))
    {
        return true;
    }
       });
    }

【问题讨论】:

  • 您是否在本地环境中对此进行了测试?
  • 不,我想在生产环境中实现它,以便其他用户可以访问 Nova。
  • 我的意思是,您是否在本地环境中测试您提供的代码?
  • 所以其他 cmets 试图得到的是如果您的环境是“本地”的,那么 gate() 函数将被忽略。我不确定做出这种选择的原因是什么,但它确实使使用 Nova 测试身份验证变得困难。
  • @orrd - 解决方法是覆盖 APP_ENV 作为测试的一部分。对于 PHPUnit,这是在 phpunit.xml,对于 Dusk,这是在 .env.dusk.local。

标签: laravel permissions authorization laravel-nova laravel-permission


【解决方案1】:

你可以这样实现你想要的:

/**
 * 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 $user->hasAnyRole(['Admin', 'Content Editor']);
    });
}

有关授权访问 Nova 的文档的更多信息:https://nova.laravel.com/docs/1.0/installation.html#authorizing-nova

【讨论】:

  • 值得重申的是,如果环境是“本地”,Nova 当前会忽略您的“viewNova”门。所以你必须改变你的环境来测试它。我怀疑他们将来可能会改变这种行为,因为它会引起混乱。但是还有一个问题,如果用户被您的“viewNova”门拒绝,用户甚至无法注销(以便以其他用户身份登录)。
  • @orrd - 解决方法是覆盖 APP_ENV 作为测试的一部分。对于 PHPUnit,这是在 phpunit.xml,对于 Dusk,这是在 .env.dusk.local。
  • @orrd 非常感谢您提及这一点。我的断点在开发中没有命中回调函数,但在生产中似乎工作正常,这让我发疯了
猜你喜欢
  • 2015-05-17
  • 1970-01-01
  • 2018-09-24
  • 2013-04-01
  • 2019-06-22
  • 1970-01-01
  • 2011-02-16
  • 1970-01-01
  • 2012-09-20
相关资源
最近更新 更多