使用带有 spatie 包的 Laravel 8 尝试获取具有角色问题的用户列表调用未定义的方法 App\Models\User::hasAllRoles()
Posted
技术标签:
【中文标题】使用带有 spatie 包的 Laravel 8 尝试获取具有角色问题的用户列表调用未定义的方法 App\\Models\\User::hasAllRoles()【英文标题】:using Laravel 8 with spatie package try to get user list with role issue Call to undefined method App\Models\User::hasAllRoles()使用带有 spatie 包的 Laravel 8 尝试获取具有角色问题的用户列表调用未定义的方法 App\Models\User::hasAllRoles() 【发布时间】:2021-07-25 01:32:39 【问题描述】:我尝试获取用户列表及其在 laravel 8 中的角色,对于角色和权限,我使用 spatie 包 (https://spatie.be/docs/laravel-permission/v4/)
我正在尝试通过返回错误的用户获取任何数据
以下函数返回错误
$all_users_with_all_their_roles = User::with('roles')->get();
$all_users_with_all_direct_permissions = User::with('permissions')->get();
$user->hasAllRoles(Role::all());
函数 (https://spatie.be/docs/laravel-permission/v3/basic-usage/basic-usage#eloquent)
错误:“调用未定义的方法 App\Models\User::getAllPermissions()”,...
我认为用户模型中缺少一些东西。
请帮忙解决这个问题
TIA
【问题讨论】:
其他与角色相关的方法是否有效?你添加了特质吗?您在该代码中在哪里调用->getAllPermissions()
?
【参考方案1】:
注意:
User::all()
和 User::where(..)->get()
的结果是 laravel eloquent 集合的实例,而不是 User 模型的实例。
解决办法:
在你的集合上使用 first()
或循环它。
$all_users_with_all_their_roles = User::with('roles')->get();
$all_users_with_all_direct_permissions = User::with('permissions')->get();
// Use for example first() to get the first user instance from collection
$user->first()->hasAllRoles(Role::all());
// Or loop over it
foreach($all_users_with_all_direct_permissions as $user)
$user->hasAllRoles(Role::all());
【讨论】:
【参考方案2】:我认为您忘记将特征添加到 User 类:
use Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable
use HasRoles;
// ...
如果你还没有忘记 trait,那么使用下面的代码获取所有用户 roles
和 permissions
。
$users = User::all();
$user_roles = [];
$user_permissions = [];
if($users)
foreach ($users AS $user)
$user_roles[$user->id] = $user->getRoleNames();
$user_permissions[$user->id] = $user->getAllPermissions();
FMI 查看:https://spatie.be/docs/laravel-permission/v3/basic-usage/basic-usage
【讨论】:
以上是关于使用带有 spatie 包的 Laravel 8 尝试获取具有角色问题的用户列表调用未定义的方法 App\Models\User::hasAllRoles()的主要内容,如果未能解决你的问题,请参考以下文章
php 具有Spatie Peermission包的Laravel Nova用户模型
如何使用 laravel 8 +jetstream + spatie 为注册用户分配角色
laravel-用户活动以及模型变动日志-spatie/laravel-activitylog