Administrator.php 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. <?php
  2. namespace Dcat\Admin\Models\Repositories;
  3. use Dcat\Admin\Grid;
  4. use Dcat\Admin\Repositories\EloquentRepository;
  5. use Illuminate\Pagination\AbstractPaginator;
  6. class Administrator extends EloquentRepository
  7. {
  8. public function __construct($relations = [])
  9. {
  10. $this->eloquentClass = config('admin.database.users_model');
  11. parent::__construct($relations);
  12. }
  13. public function get(Grid\Model $model)
  14. {
  15. $model = parent::get($model);
  16. $isPaginator = $model instanceof AbstractPaginator;
  17. $items = collect($isPaginator ? $model->items() : $model)->toArray();
  18. if (!$items) {
  19. return $model;
  20. }
  21. $roleModel = config('admin.database.roles_model');
  22. $items = collect($items);
  23. $roleKeyName = (new $roleModel())->getKeyName();
  24. $roleIds = $items
  25. ->pluck('roles')
  26. ->flatten(1)
  27. ->keyBy($roleKeyName)
  28. ->keys()
  29. ->toArray();
  30. $permissions = $roleModel::getPermissionId($roleIds);
  31. if (!$permissions->isEmpty()) {
  32. $items = $items->map(function ($v) use ($roleKeyName, $permissions) {
  33. $v['permissions'] = [];
  34. foreach (array_column($v['roles'], $roleKeyName) as $roleId) {
  35. $v['permissions'] = array_merge($v['permissions'], $permissions->get($roleId, []));
  36. }
  37. $v['permissions'] = array_unique($v['permissions']);
  38. return $v;
  39. });
  40. }
  41. if ($isPaginator) {
  42. $model->setCollection($items);
  43. return $model;
  44. }
  45. return $items;
  46. }
  47. }