PermissionRepository.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <?php
  2. namespace App\Repositories;
  3. use App\Models\Permission;
  4. use Illuminate\Database\Eloquent\Collection;
  5. use App\DataTransferObjects\PermissionDto;
  6. class PermissionRepository implements PermissionRepositoryInterface
  7. {
  8. public function __construct(
  9. protected Permission $model
  10. ) {}
  11. public function all(): ?Collection
  12. {
  13. return $this->model->all()->toTree();
  14. }
  15. public function allNoTree(): ?Collection
  16. {
  17. return $this->model->all();
  18. }
  19. public function find(int $id): ?Permission
  20. {
  21. return $this->model->find($id);
  22. }
  23. public function findByScope(string $scope): ?Permission
  24. {
  25. return $this->model->where('scope', $scope)->first();
  26. }
  27. public function update(PermissionDto $permissionDto, int $id): ?Permission
  28. {
  29. $permission = $this->model->find($id);
  30. $permission->update([
  31. 'scope' => $permissionDto->scope,
  32. 'description' => $permissionDto->description,
  33. 'bits' => $permissionDto->bits,
  34. 'parent_id' => $permissionDto->parent_id,
  35. ]);
  36. return $permission;
  37. }
  38. public function store(PermissionDto $permissionDto): Permission
  39. {
  40. $permission = $this->model->firstOrNew([
  41. 'scope' => $permissionDto->scope,
  42. 'description' => $permissionDto->description,
  43. 'bits' => $permissionDto->bits,
  44. 'scope' => $permissionDto->scope,
  45. ]);
  46. if ($permissionDto->parent_id) {
  47. $parent = $this->model->find($permissionDto->parent_id);
  48. $permission->prependToNode($parent);
  49. }
  50. $permission->save();
  51. return $permission;
  52. }
  53. public function delete(int $id): bool
  54. {
  55. return $this->model->destroy($id) > 0;
  56. }
  57. }