middleware('auth:sanctum') ->except([]); } /** * Display a listing of the resource. * * @param \App\Filters\UserFilter $filter Filter object. * @return \Illuminate\Http\Response */ public function index(UserFilter $filter) { $collection = $filter->filter(); return $this->respondAsResource( $collection, ['total' => $filter->foundTotal()] ); } /** * Store a newly created user in the database. * * @param UserStoreRequest $request The user update request. * @return \Illuminate\Http\Response */ public function store(UserStoreRequest $request) { if ($request->user()->hasPermission('admin/user') !== true) { return $this->respondForbidden(); } $user = User::create($request->all()); return $this->respondAsResource((new UserFilter($request))->filter($user), [], HttpResponseCodes::HTTP_CREATED); } /** * Display the specified user. * * @param UserFilter $filter The user filter. * @param User $user The user model. * @return \Illuminate\Http\Response */ public function show(UserFilter $filter, User $user) { return $this->respondAsResource($filter->filter($user)); } /** * Update the specified resource in storage. * * @param UserUpdateRequest $request The user update request. * @param User $user The specified user. * @return \Illuminate\Http\Response */ public function update(UserUpdateRequest $request, User $user) { $input = []; $updatable = ['username', 'first_name', 'last_name', 'email', 'phone', 'password']; if ($request->user()->hasPermission('admin/user') === true) { $updatable = array_merge($updatable, ['email_verified_at']); } elseif ($request->user()->is($user) !== true) { return $this->respondForbidden(); } $input = $request->only($updatable); if (array_key_exists('password', $input) === true) { $input['password'] = Hash::make($request->input('password')); } $user->update($input); return $this->respondAsResource((new UserFilter($request))->filter($user)); } /** * Remove the user from the database. * * @param User $user The specified user. * @return \Illuminate\Http\Response */ public function destroy(User $user) { if ($user->hasPermission('admin/user') === false) { return $this->respondForbidden(); } $user->delete(); return $this->respondNoContent(); } }