如何解决使用自定义保护时,门将身份验证模型设置为身份验证回调的第二个参数 说明:重现步骤:
说明:
当我尝试为我的授权逻辑使用自定义保护时,我能够从第二个回调参数而不是第一个参数访问经过身份验证的对象。
重现步骤:
namespace App\Providers;
class HorizonServiceProvider extends HorizonapplicationserviceProvider
{
...
protected function authorization()
{
$this->gate();
Horizon::auth(function ($request) {
return app()->environment('local') ||
Gate::check('viewHorizon',[$request->user('web:admin')]);
// used custom guard
});
}
protected function gate()
{
Gate::define(
'viewHorizon',fn ($user = null,$admin = null) =>
// 2nd arg = $admin has the authenticated object
// # unexpected behavIoUr
($admin ? $admin::class : null) == Admin::class
);
}
}
这是正常行为吗?还是我做错了什么?
解决方法
您应该在 Horizon 配置文件中使用自定义保护:config/horizon.php
。就我而言:
<?php
return [
...
'middleware' => ['web','auth:admin'],...
];
然后在 HorizonServiceProvider
中,您应该检查用户角色:
Gate::define('viewHorizon',function ($user) {
return $user instanceof AdminUser && $user->isAdmin();
});
请注意,要应用上述 Gate,您应该在 production
文件中将环境更改为 .env
。要了解原因,请查看vendor/laravel/horizon/src/HorizonApplicationServiceProvider.php
:
Horizon::auth(function ($request) {
return app()->environment('local') ||
Gate::check('viewHorizon',[$request->user()]);
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。