GroupController.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. <?php
  2. namespace App\Api\v1\Controllers;
  3. use App\Api\v1\Requests\GroupAssignRequest;
  4. use App\Api\v1\Requests\GroupStoreRequest;
  5. use App\Api\v1\Resources\GroupResource;
  6. use App\Api\v1\Resources\TwoFAccountCollection;
  7. use App\Facades\Groups;
  8. use App\Http\Controllers\Controller;
  9. use App\Models\Group;
  10. use Illuminate\Http\Request;
  11. class GroupController extends Controller
  12. {
  13. /**
  14. * Display all user groups.
  15. *
  16. * @param \Illuminate\Http\Request $request
  17. * @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
  18. */
  19. public function index(Request $request)
  20. {
  21. // We do not use fluent call all over the call chain to ease tests
  22. $user = $request->user();
  23. $groups = $user->groups()->withCount('twofaccounts')->get();
  24. return GroupResource::collection(Groups::prependTheAllGroup($groups, $request->user()));
  25. }
  26. /**
  27. * Store a newly created resource in storage.
  28. *
  29. * @param \App\Api\v1\Requests\GroupStoreRequest $request
  30. * @return \Illuminate\Http\JsonResponse
  31. */
  32. public function store(GroupStoreRequest $request)
  33. {
  34. $this->authorize('create', Group::class);
  35. $validated = $request->validated();
  36. $group = $request->user()->groups()->create($validated);
  37. return (new GroupResource($group))
  38. ->response()
  39. ->setStatusCode(201);
  40. }
  41. /**
  42. * Display the specified resource.
  43. *
  44. * @param \App\Models\Group $group
  45. * @return \App\Api\v1\Resources\GroupResource
  46. */
  47. public function show(Group $group)
  48. {
  49. $this->authorize('view', $group);
  50. return new GroupResource($group);
  51. }
  52. /**
  53. * Update the specified resource in storage.
  54. *
  55. * @param \App\Api\v1\Requests\GroupStoreRequest $request
  56. * @param \App\Models\Group $group
  57. * @return \App\Api\v1\Resources\GroupResource
  58. */
  59. public function update(GroupStoreRequest $request, Group $group)
  60. {
  61. $this->authorize('update', $group);
  62. $validated = $request->validated();
  63. $group->update($validated);
  64. return new GroupResource($group);
  65. }
  66. /**
  67. * Associate the specified accounts with the group
  68. *
  69. * @param \App\Api\v1\Requests\GroupAssignRequest $request
  70. * @param \App\Models\Group $group
  71. * @return \App\Api\v1\Resources\GroupResource
  72. */
  73. public function assignAccounts(GroupAssignRequest $request, Group $group)
  74. {
  75. $this->authorize('update', $group);
  76. $validated = $request->validated();
  77. Groups::assign($validated['ids'], $request->user(), $group);
  78. return new GroupResource($group);
  79. }
  80. /**
  81. * Get accounts assigned to the group
  82. *
  83. * @param \App\Models\Group $group
  84. * @return \App\Api\v1\Resources\TwoFAccountCollection
  85. */
  86. public function accounts(Group $group)
  87. {
  88. $this->authorize('view', $group);
  89. return new TwoFAccountCollection($group->twofaccounts);
  90. }
  91. /**
  92. * Remove the specified resource from storage.
  93. *
  94. * @param \App\Models\Group $group
  95. * @return \Illuminate\Http\JsonResponse
  96. */
  97. public function destroy(Group $group)
  98. {
  99. $this->authorize('delete', $group);
  100. $group->delete();
  101. return response()->json(null, 204);
  102. }
  103. }