允许某些角色访问 Laravel Nova 仪表板?
Posted
技术标签:
【中文标题】允许某些角色访问 Laravel Nova 仪表板?【英文标题】:Enabling certain roles to access Laravel Nova dashboard? 【发布时间】: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
。
【参考方案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 非常感谢您提及这一点。我的断点在开发中没有命中回调函数,但在生产中似乎工作正常,这让我发疯了以上是关于允许某些角色访问 Laravel Nova 仪表板?的主要内容,如果未能解决你的问题,请参考以下文章