【发布时间】:2021-05-29 03:01:49
【问题描述】:
我写作是因为我已经花费了数小时的测试来寻找问题的解决方案,但我仍然没有找到解决方法。我正在使用Spatie Laravel Permission,碰巧我有3个资源,一个用于user,另一个用于role,另一个用于permissions。我展示了上述资源的结构:
用户资源.php
class UserResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param Request $request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'email' => $this->email,
'roles' => RoleResource::collection($this->whenLoaded('roles')),
'permissions' => PermissionResource::collection($this->whenLoaded('permissions', $this->getAllPermissions())),
'active' => $this->active,
];
}
}
RoleResource.php
class RoleResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param Request $request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'permissions' => PermissionResource::collection($this->whenLoaded('permissions'))
];
}
}
PermissionResource.php
class PermissionResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param Request $request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name
];
}
}
正如您在我的UserResource.php 文件中所见,我正在定义一个结构以仅在需要时显示用户角色和权限。您还可以看到,在permissions 键中,我不仅返回与用户关联的权限,而是返回与用户直接关联并与他们拥有的角色相关联的所有权限getAllPermissions()。
现在看RoleResource.php 文件,我定义与角色关联的权限仅在必要时才会显示,这就是我的问题。当我执行以下操作时:
public function index()
{
return UserResource::make(User::with(['roles', 'permissions'])->find(1));
}
我收到以下回复:
看看关键:roles,它向我显示了permissions 关系,这不是预期的结果,我希望它仅在我执行以下操作时才会显示该结果:
public function index()
{
return UserResource::make(User::with(['roles.permissions', 'permissions'])->find(1));
}
我已经做了很多测试,一切似乎都表明,当我调用 getAllPermissions() 方法时,还会加载 permissions 关系,这就是发生这种情况的原因。请你帮我解决这个问题。非常感谢您。
【问题讨论】:
标签: laravel laravel-api laravel-permission laravel-resource