为什么当我在 Laravel Nova 的 Eloquent Event / Observer 中时,没有附加 Laravel Spatie 权限角色?

Why doesn't the Laravel Spatie permission role attach when I'm in an Eloquent Event / Observer with Laravel Nova?

提问人:Harry 提问时间:11/10/2023 最后编辑:Harry 更新时间:11/10/2023 访问量:27

问:

我正在将 Laravel Nova 与 Spatie Permissions 包(Laravel 10.21.0 / Laravel Nova 4.26.5 上的 5.10.2 版本)一起使用,并且当我使用 Eloquent 观察器时,面临着角色未附加到用户的问题。下面是观察者方法:

public function saved(User $user): void
{
    if (!$user->roles->count()) {
        $role = Role::where('name', 'Client')->first();
        if($role) {
            $user->assignRole($role);
        }
    }
}

此方法应该为用户分配一个“客户端”角色(如果用户还没有角色),但它在观察者中不起作用。但是,当从控制器调用时,相同的代码可以完美地工作。这是我到目前为止检查的内容:

  • 当我尝试使用 Tinker 或在控制器内部更新用户时,它工作正常。
  • 保存的方法肯定被触发,并由日志确认,但 attach 方法除外。我也尝试过使用DB::insert,但仍然没有记录。
  • 没有记录任何错误,Laravel 调试模式已启用。
  • 我通过放置日志语句来确保事件实际上正在触发。
  • 我尝试使用 php artisan permission:cache-reset 清除角色缓存。
  • 我的模型观察器已在服务提供商的引导方法中正确注册。 尽管进行了这些检查,但当观察者尝试附加角色时,数据库中不会创建任何记录。当我在控制器中执行此操作时,它会按预期运行。

我也在使用 Laravel Nova,这可能会影响观察者的工作方式,尽管我不确定如何或为什么会这样。

几个小时以来,我一直在尝试解决这个问题,非常感谢社区的任何见解或建议。谢谢!

我想为没有使用保存事件的用户附加一个默认角色。

Laravel Events 雄辩 的 Laravel-Nova Laravel- 许可

评论


答: 暂无答案