RoleController.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <?php
  2. namespace App\Http\Controllers\API;
  3. use App\Http\Controllers\Controller;
  4. use App\Http\Requests\API\Role\CreateOrUpdateRequest;
  5. use App\Http\Resources\API\RoleResource;
  6. use App\Http\Resources\PermissionResource;
  7. use App\Models\Role;
  8. use Illuminate\Http\Request;
  9. class RoleController extends Controller
  10. {
  11. /**
  12. * Display a listing of the resource.
  13. */
  14. public function index()
  15. {
  16. $roles = Role::all();
  17. return RoleResource::collection($roles);
  18. }
  19. /**
  20. * Store a newly created resource in storage.
  21. */
  22. public function store(CreateOrUpdateRequest $request)
  23. {
  24. Role::create([
  25. ...$request->only(['name', 'description']),
  26. 'guard_name' => 'api',
  27. ]);
  28. return $this->created();
  29. }
  30. /**
  31. * Display the specified resource.
  32. */
  33. public function show(string $id)
  34. {
  35. //
  36. }
  37. /**
  38. * Update the specified resource in storage.
  39. */
  40. public function update(CreateOrUpdateRequest $request, string $id)
  41. {
  42. $role = Role::query()->findOrFail($id);
  43. $role->update($request->only([
  44. 'name', 'description'
  45. ]));
  46. return $this->noContent();
  47. }
  48. /**
  49. * Remove the specified resource from storage.
  50. */
  51. public function destroy(string $id)
  52. {
  53. Role::destroy($id);
  54. return $this->noContent();
  55. }
  56. public function permissions(string $id)
  57. {
  58. $role = Role::query()->findOrFail($id);
  59. return $this->success([
  60. 'data' => $role->permissions?->pluck('name'),
  61. ]);
  62. }
  63. public function assignPermissions(string $id, Request $request)
  64. {
  65. $role = Role::query()->findOrFail($id);
  66. $role->syncPermissions($request->input('permissions', []));
  67. return $this->noContent();
  68. }
  69. }