model = new \app\model\admin\User(); } public function login() { //获取表单提交数据 $param = $this->request->post(); //防止密码爆破 $fail = Cache::get('laytp-admin-login-num-' . $param['username'], 1); if ($fail >= 5) return $this->error('失败次数过多,请三分钟后再试'); //验证表单提交 $validate = new Login(); if (!$validate->check($param)) { $param['password'] = '******'; //登录失败也不记录用户密码 Log::create([ 'login_status' => 2, 'admin_id' => 0, 'request_body' => json_encode($param), 'request_header' => json_encode($this->request->header()), 'ip' => $this->request->ip(), 'create_time' => date('Y-m-d H:i:s'), ]); Cache::set('laytp-admin-login-num-' . $param['username'], $fail + 1, 180); return $this->error($validate->getError()); } //设置登录信息 $loginUserInfo = \app\model\admin\User::where('username', '=', $param['username']) ->with(['avatar_file'])->field(UserServiceFacade::getAllowFields())->findOrEmpty(); $loginUserInfo->login_time = date('Y-m-d H:i:s'); $loginUserInfo->login_ip = $this->request->ip(); $loginUserInfo->save(); $userId = $loginUserInfo['id']; $token = Random::uuid(); $loginUserInfo['token'] = $token; Token::set($token, $userId, 24 * 60 * 60 * 3); $param['password'] = '******'; //登录成功不记录用户密码 Log::create([ 'login_status' => 1, 'admin_id' => $userId, 'request_body' => json_encode($param), 'request_header' => json_encode($this->request->header()), 'ip' => $this->request->ip(), 'create_time' => date('Y-m-d H:i:s'), ]); $authList = AuthServiceFacade::getAuthList($userId); return $this->success('登录成功', [ 'user' => $loginUserInfo, 'authList' => $authList, 'pluginConf' => Config::get('plugin'), ]); } public function loginInfo() { $loginUserInfo = UserServiceFacade::getUserInfo(); $authList = AuthServiceFacade::getAuthList($loginUserInfo['id']); return $this->success('获取成功', [ 'user' => $loginUserInfo, 'authList' => $authList, 'pluginConf' => Config::get('plugin'), 'ltVersion' => LT_VERSION, ]); } //退出登录 public function logout() { $token = $this->request->header('laytp-admin-token', $this->request->cookie('laytpAdminToken')); Token::delete($token); return $this->success('退出成功'); } //查看 public function index() { $where = $this->buildSearchParams(); $order = $this->buildOrder(); $data = $this->model->where($where)->order($order)->with(['avatar_file']); $paging = $this->request->param('paging', false); if ($paging) { $limit = $this->request->param('limit', Config::get('paginate.limit')); $data = $data->paginate($limit)->toArray(); $data['data'] = $this->getSelectedData($data['data']); } else { $data = $data->select()->toArray(); } return $this->success('数据获取成功', $data); } //添加 public function add() { Db::startTrans(); try { $post = CommonFun::filterPostData($this->request->post()); $validate = new Add(); if (!$validate->check($post)) throw new \Exception($validate->getError()); $post['password'] = Str::createPassword($post['password']); $saveRes = $this->model->save($post); if (!$saveRes) throw new \Exception('保存基础信息失败'); if ($post['role_ids']) { $roleIds = explode(',', $post['role_ids']); $data = []; foreach ($roleIds as $k => $v) { $data[] = ['admin_role_id' => $v, 'admin_user_id' => $this->model->id]; } $roleUser = new \app\model\admin\role\User(); $saveAllRes = $roleUser->saveAll($data); if (!$saveAllRes) throw new \Exception('保存角色信息失败'); } Db::commit(); return $this->success('操作成功'); } catch (\Exception $e) { Db::rollback(); return $this->error('数据库异常,操作失败'); } } //查看详情 public function info() { $id = $this->request->param('id'); $info = $this->model->with(['role_ids', 'avatar_file'])->findOrEmpty($id)->toArray(); $data = \app\resource\admin\User::info($info); return $this->success('获取成功', $data); } //编辑 public function edit() { Db::startTrans(); try { $post = CommonFun::filterPostData($this->request->post()); $user = $this->model->findOrEmpty($post['id']); if (!$user) throw new \Exception('id参数错误'); $validate = new Edit(); if (!$validate->check($post)) throw new \Exception($validate->getError()); if ($post['password']) { $post['password'] = Str::createPassword($post['password']); } else { unset($post['password']); unset($post['re_password']); } $updateRes = $user->update($post); if (!$updateRes) throw new \Exception('保存基本信息失败'); $userRole = new \app\model\admin\role\User(); $deleteRes = $userRole->where('admin_user_id', '=', $post['id'])->delete(); if (!is_numeric($deleteRes)) throw new \Exception('删除用户角色失败'); if ($post['role_ids']) { $roleIds = explode(',', $post['role_ids']); $data = []; foreach ($roleIds as $k => $v) { $data[] = ['admin_role_id' => $v, 'admin_user_id' => $user->id]; } $saveAllRes = $userRole->saveAll($data); if (!$saveAllRes) throw new \Exception('保存用户角色失败'); } Db::commit(); return $this->success('操作成功'); } catch (\Exception $e) { Db::rollback(); return $this->exceptionError($e); } } //修改个人资料 public function singleEdit() { $post = CommonFun::filterPostData($this->request->post()); $validate = new singleEdit(); if (!$validate->check($post)) { return $this->error($validate->getError()); } if (!$post['password']) { unset($post['password']); } else { $post['password'] = Str::createPassword($post['password']); } $user = $this->model->with(['avatar_file'])->find($post['id']); if (!$user) { return $this->error('ID参数错误'); } $res = $user->update($post); if ($res) { return $this->success('操作成功'); } else { return $this->error('操作失败'); } } //删除 public function del() { $ids = array_filter($this->request->param('ids')); if (!$ids) { return $this->error('参数ids不能为空'); } if (in_array(1, $ids)) { return $this->error('不允许删除初始化用户'); } try { if ($this->model->destroy($ids)) { return $this->success('数据删除成功'); } else { return $this->error('数据删除失败'); } } catch (\Exception $e) { return $this->exceptionError($e); } } //设置状态 public function setStatus() { $id = $this->request->post('id'); $fieldVal = $this->request->post('field_val'); $isRecycle = $this->request->post('is_recycle'); $update['status'] = $fieldVal; try { if ($isRecycle) { $updateRes = $this->model->onlyTrashed()->where('id', '=', $id)->update($update); } else { $updateRes = $this->model->where('id', '=', $id)->update($update); } if ($updateRes) { return $this->success('操作成功'); } else if ($updateRes === 0) { return $this->success('未作修改'); } else { return $this->error('操作失败'); } } catch (\Exception $e) { return $this->error('数据库异常,操作失败'); } } //设置是否为超管 public function setIsSuperManager() { $id = $this->request->post('id'); $fieldVal = $this->request->post('field_val'); $isRecycle = $this->request->post('is_recycle'); $update['is_super_manager'] = $fieldVal; try { if ($isRecycle) { $updateRes = $this->model->onlyTrashed()->where('id', '=', $id)->update($update); } else { $updateRes = $this->model->where('id', '=', $id)->update($update); } if ($updateRes) { return $this->success('操作成功'); } else if ($updateRes === 0) { return $this->success('未作修改'); } else { return $this->error('操作失败'); } } catch (\Exception $e) { return $this->error('数据库异常,操作失败'); } } }