Использовать разнесение в коллекции для группировки по второму значению - PullRequest
0 голосов
/ 15 июня 2019

Я использую разрешение spatie / laravel (https://github.com/spatie/laravel-permission) для определения разрешений и ролей.

Теперь я хотел бы создать представление, в котором перечислены все разрешения в таблице.

Для архивации я создаю ресурс API, который должен содержать:

Это то, что я хочу архивировать:

permissions: [
        { module: 'User', view: true, create: false, delete: false },
        { module: 'Todo', view: true, create: false, delete: false },
      ],

Имя разрешения всегда verb-model (view-user, create-user, delete-user, view-todo, create-todo, ...)

Поэтому я подумал о разбиении имени каждого Permission с помощью explode.

Итак, я получу:

['view', 'user']
['create', 'user']
['delete', 'user']
...

Этот массив может быть сгруппирован в моем ресурсе.

Поэтому я мог бы сделать что-то вроде:

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;
use Spatie\Permission\Models\Permission;


class UserRoleResource extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request $request
     *
     * @return array
     */
    public function toArray($request)
    {
        return [
            'id'          => $this->id,
            'name'        => $this->name,
            'permissions' => Permission::all()->each(function($permission){
                //return the exploded array
            })
        ];
    }

}

Но может быть с Laravel есть более простой способ?

Спасибо за ваши мысли по этому поводу: -)

...