middleware('permission:users.manage'); } /** * Paginate all users. */ public function index(Request $request): \Illuminate\Http\Resources\Json\AnonymousResourceCollection { $users = QueryBuilder::for(User::class) ->allowedIncludes(UserResource::allowedIncludes()) ->allowedFilters([ AllowedFilter::custom('search', new UserKeywordSearch), AllowedFilter::exact('status'), ]) ->allowedSorts(['id', 'first_name', 'last_name', 'email', 'created_at', 'updated_at']) ->defaultSort('id') ->paginate($request->per_page ?: 20); return UserResource::collection($users); } public function store(CreateUserRequest $request): UserResource { $data = $request->only([ 'email', 'password', 'username', 'first_name', 'last_name', 'phone', 'address', 'country_id', 'birthday', 'role_id', ]); $data += [ 'status' => UserStatus::ACTIVE, 'email_verified_at' => $request->verified ? now() : null, ]; $user = $this->users->create($data); return new UserResource($user); } public function show($id): UserResource { $user = QueryBuilder::for(User::where('id', $id)) ->allowedIncludes(UserResource::allowedIncludes()) ->firstOrFail(); return new UserResource($user); } public function update(User $user, UpdateUserRequest $request): UserResource { $data = $request->only([ 'email', 'password', 'username', 'first_name', 'last_name', 'phone', 'address', 'country_id', 'birthday', 'status', 'role_id', ]); $user = $this->users->update($user->id, $data); event(new UpdatedByAdmin($user)); // If user status was updated to "Banned", // fire the appropriate event. if ($this->userIsBanned($user, $request)) { event(new Banned($user)); } return new UserResource($user); } /** * Check if user is banned during last update. */ private function userIsBanned(User $user, Request $request): bool { return $user->status != $request->status && $request->status == UserStatus::BANNED; } public function destroy(User $user): \Illuminate\Http\JsonResponse { if ($user->id == auth()->id()) { return $this->errorForbidden(__('You cannot delete yourself.')); } event(new Deleted($user)); $this->users->delete($user->id); return $this->respondWithSuccess(); } }