RolesController.php 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <?php
  2. declare(strict_types=1);
  3. namespace Modules\Permissions\Http\Controllers;
  4. use Catch\Base\CatchController as Controller;
  5. use Catch\Exceptions\FailedException;
  6. use Modules\Permissions\Enums\DataRange;
  7. use Modules\Permissions\Http\Requests\RoleRequest;
  8. use Modules\Permissions\Models\Roles;
  9. class RolesController extends Controller
  10. {
  11. /**
  12. * @param Roles $model
  13. */
  14. public function __construct(
  15. protected readonly Roles $model
  16. ) {
  17. }
  18. /**
  19. * @return mixed
  20. */
  21. public function index(): mixed
  22. {
  23. return $this->model->setBeforeGetList(function ($query) {
  24. return $query->with(['permissions' => function ($query) {
  25. $query->select('id');
  26. }]);
  27. })->getList();
  28. }
  29. /**
  30. *
  31. * @param RoleRequest $request
  32. * @return bool
  33. */
  34. public function store(RoleRequest $request)
  35. {
  36. if (! DataRange::Personal_Choose->assert($request->get('data_range'))) {
  37. $request['departments'] = [];
  38. }
  39. return $this->model->storeBy($request->all());
  40. }
  41. /**
  42. *
  43. * @param $id
  44. * @return \Illuminate\Database\Eloquent\Model|null
  45. */
  46. public function show($id)
  47. {
  48. $role = $this->model->firstBy($id);
  49. $role->setAttribute('permissions', $role->permissions()->get()->toTree());
  50. $role->setAttribute('departments', $role->departments()->pluck('id'));
  51. return $role;
  52. }
  53. /**
  54. *
  55. * @param $id
  56. * @param RoleRequest $request
  57. * @return mixed
  58. */
  59. public function update($id, RoleRequest $request)
  60. {
  61. if (! DataRange::Personal_Choose->assert($request->get('data_range'))) {
  62. $request['departments'] = [];
  63. }
  64. return $this->model->updateBy($id, $request->all());
  65. }
  66. /**
  67. * @param $id
  68. * @return bool|null
  69. */
  70. public function destroy($id)
  71. {
  72. if ($this->model->where($this->model->getParentIdColumn(), $id)->first()) {
  73. throw new FailedException('请先删除子角色');
  74. }
  75. return $this->model->deleteBy($id);
  76. }
  77. }