users()->get(); return new MemberCollection($members); } public function update(UpdateMemberRequest $request, Organisation $organisation, User $user): JsonResponse { Gate::authorize('invite', $organisation); if ($request->user()->id === $user->id) { return $this->error('Je kunt je eigen rol niet wijzigen.', 422); } $currentRole = $organisation->users() ->where('user_id', $user->id) ->first()?->pivot?->role; if ($currentRole === 'org_admin' && $request->validated('role') !== 'org_admin') { $adminCount = $organisation->users() ->wherePivot('role', 'org_admin') ->count(); if ($adminCount <= 1) { return $this->error('De laatste org_admin kan niet worden gedegradeerd.', 422); } } $organisation->users()->updateExistingPivot($user->id, [ 'role' => $request->validated('role'), ]); return $this->success( new MemberResource($organisation->users()->where('user_id', $user->id)->first()), ); } public function destroy(Organisation $organisation, User $user): JsonResponse { Gate::authorize('invite', $organisation); if (request()->user()->id === $user->id) { return $this->error('Je kunt je eigen account niet verwijderen uit de organisatie.', 422); } $currentRole = $organisation->users() ->where('user_id', $user->id) ->first()?->pivot?->role; if ($currentRole === 'org_admin') { $adminCount = $organisation->users() ->wherePivot('role', 'org_admin') ->count(); if ($adminCount <= 1) { return $this->error('De laatste org_admin kan niet worden verwijderd.', 422); } } $organisation->users()->detach($user->id); return response()->json(null, 204); } }