问题描述
我正在使用 Spatie > 后端中的权限包构建用于管理用户/角色/权限的前端。
我正在寻求实现的一个功能是选择一个权限并进行此选择,然后显示具有所选权限的所有用户。
使用 PHP artisan tinker
,我可以使用以下语句:
Spatie\Permission\Model\Permission::with("roles.users")->find(59);
,其中 59
表示有问题的权限->id,并返回相应的结果。
我的问题是,当我将此代码带到 PHP 并寻求 dd((Permission::with('roles.users')->find(59));
时,我收到一个 错误
类名必须是有效的对象或字符串错误。
使用 dd((Permission::with('roles')->find(59));
移除嵌套关系被 Laravel 适当处理。但是我想访问具有指定权限的用户。
简而言之,嵌套的急切加载似乎失败了,完全取决于代码是在 Laravel 还是 Tinker 中。
我使用的是 PHP v7.3.25 和 Laravel 8.22.1
感谢您的帮助。
解决方法
好的。问题解决了。感谢那些试图提供帮助的人 - 您坚持认为它应该“正常工作”让我更深入地了解代码。
Spatie Permissions package 做得很好,研究也很好。由于我是开箱即用的,没有进一步修改,因此我认为关系已正确设置,并且确实如此。
问题在于使用的默认身份验证。 Spatie 想使用 Auth::web 而 Laravel 想使用 Auth::sanctum。
通过“角色”连接到用户关系时发现我的身份验证功能不匹配,并引发了一般错误。因此,如果其他人认为这是一个问题,请确保您的身份验证检查具有连续性,这样您就可以顺利进行了。请注意,这对 Tinker 来说没有问题,这就是为什么最初的行为如此令人困惑。