input('id'))) { abort(500, '参数错误'); } $user = User::where('is_admin', 0) ->where('id', $request->input('id')) ->where('is_staff', 0) ->first(); if (!$user) abort(500, '用户不存在'); return response([ 'data' => $user ]); } public function update(UserUpdate $request) { $params = $request->validated(); $user = User::find($request->input('id')); if (!$user) { abort(500, '用户不存在'); } if (User::where('email', $params['email'])->first() && $user->email !== $params['email']) { abort(500, '邮箱已被使用'); } if (isset($params['password'])) { $params['password'] = password_hash($params['password'], PASSWORD_DEFAULT); $params['password_algo'] = NULL; } else { unset($params['password']); } if (isset($params['plan_id'])) { $plan = Plan::find($params['plan_id']); if (!$plan) { abort(500, '订阅计划不存在'); } $params['group_id'] = $plan->group_id; } try { $user->update($params); } catch (\Exception $e) { abort(500, '保存失败'); } return response([ 'data' => true ]); } public function sendMail(UserSendMail $request) { $sortType = in_array($request->input('sort_type'), ['ASC', 'DESC']) ? $request->input('sort_type') : 'DESC'; $sort = $request->input('sort') ? $request->input('sort') : 'created_at'; $builder = User::orderBy($sort, $sortType); $this->filter($request, $builder); $users = $builder->get(); foreach ($users as $user) { SendEmailJob::dispatch([ 'email' => $user->email, 'subject' => $request->input('subject'), 'template_name' => 'notify', 'template_value' => [ 'name' => config('v2board.app_name', 'V2Board'), 'url' => config('v2board.app_url'), 'content' => $request->input('content') ] ]); } return response([ 'data' => true ]); } public function ban(Request $request) { $sortType = in_array($request->input('sort_type'), ['ASC', 'DESC']) ? $request->input('sort_type') : 'DESC'; $sort = $request->input('sort') ? $request->input('sort') : 'created_at'; $builder = User::orderBy($sort, $sortType); $this->filter($request, $builder); try { $builder->update([ 'banned' => 1 ]); } catch (\Exception $e) { abort(500, '处理失败'); } return response([ 'data' => true ]); } }