В Laravel 6 с "spatie / laravel -permission": "^ 3.5" Я делаю список всех разрешений с добавочным полем is_checked равным true, если у пользователя есть это разрешение:
$permissions = $user->permissions->all();
$userPermissionLabels= Permission
::get()
->map(function ($item) use($permissions) {
$is_checked= 0;
foreach( $permissions as $nextPermission ) {
if($nextPermission->id == $item->id) {
$is_checked= 1;
break;
}
}
return [ 'id'=> $item->id, 'name'=> $item->name, 'is_checked' => $is_checked];
})
->all();
\Log::info(' ModelHasPermissionsController INDEX $userPermissionLabels');
\Log::info(json_encode($userPermissionLabels));
return (new PermissionCollection($userPermissionLabels));
У меня есть действительный массив $ userPermissionLabels, но у меня проблема с определениями ресурсов:
app / Http / Resources / PermissionCollection. php:
<?php
namespace App\Http\Resources;
use App\library\MyFuncsClass;
use Illuminate\Http\Resources\Json\ResourceCollection;
use tests\Mockery\Adapter\Phpunit\EmptyTestCase;
class PermissionCollection extends ResourceCollection
{
public static $wrap = 'permissions';
public function toArray($request)
{
$this->collection->transform(function ($permission) {
\Log::info(' +++PermissionCollection $permission');
\Log::info(json_encode($permission));
// I see rows like ‘{"id":1,"name":"App admin","is_checked":0} ’
return new PermissionResource($permission);
});
return parent::toArray($request);
}
public function with($request)
{
return [
'meta' => [
'version'=>MyFuncsClass::getAppVersion()
]
];
}
}
и app / Http / Resources / PermissionResource . php:
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class PermissionResource extends JsonResource
{
public static $wrap = 'permissions';
public function toArray($request)
{
\Log::info(' PermissionResource $request');
\Log::info(json_encode($request)); // NO DATA ARE LOGGED
\Log::info(' PermissionResource $this');
\Log::info(json_encode($this));; // NO DATA ARE LOGGED
return [
'id' => $this->id, // AND THAT RAISE ERROR
'name' => $this->name,
'is_checked' => $this->is_checked ?? null,
'guard_name' => $this->guard_name ?? null,
'created_at' => $this->created_at ?? null,
];
// return parent::toArray($request);
}
}
Я полагаю, что я должен отправить данные в свой контроль каким-либо другим способом. Как?
Спасибо!