count() > 0; if ($exists) { throw new \Exception('账号已存在', 400); } } /** * 数据验证 * * @param array $params * @return $this * @throws \Exception */ protected function dataValidate(array $params): self { $validate = Validate::make([ 'account' => 'require|/\S+/', 'username' => 'require|/\S+/', 'password' => 'require|/\S+/', 'permissionIds' => 'require|array', ], [ 'account.require' => '账号不能为空', 'username.require' => '用户名不能为空', 'password.require' => '密码不能为空', 'permissionIds.require' => '请至少分配一种权限', ]); if (!$validate->check($params)) { throw new \Exception($validate->getError(), 400); } return $this; } /** * 判断是否有权限修改 * * @return $this */ protected function checkPermission(): self { if ($this->getAdminInfo('id') != 1) { throw new \Exception('您没有权限添加管理员', 403); } return $this; } /** * 保存管理员权限 * * @param int $adminId 管理员ID * @param array $permissionIds 权限ID数组 * @return bool */ protected function savePermissions(int $adminId, array $permissionIds) { $record = AdministratorPermissionsModel::where('adminId', $adminId)->find(); $permissionData = [ 'ids' => is_array($permissionIds) ? implode(',', $permissionIds) : $permissionIds ]; if ($record) { return $record->save([ 'permissions' => json_encode($permissionData), ]); } else { return AdministratorPermissionsModel::create([ 'adminId' => $adminId, 'permissions' => json_encode($permissionData), ]); } } /** * 添加管理员信息 * * @param array $params * @return AdministratorModel * @throws \Exception */ protected function addAdministrator(array $params): AdministratorModel { $result = AdministratorModel::create(array_merge($params, ['password' => md5($params['password'])])); if (!$result) { throw new \Exception('添加管理员失败', 401); } return $result; } /** * 添加管理员 * * @return \think\response\Json */ public function index() { try { $params = $this->request->only(['account', 'username', 'password', 'permissionIds']); $this->dataValidate($params); $this->checkPermission()->chekAdminIsExist($params['account']); Db::startTrans(); $admin = $this->addAdministrator($params); // 保存权限 if (!empty($params['permissionIds'])) { $this->savePermissions($admin->id, $params['permissionIds']); } Db::commit(); return ResponseHelper::success(); } catch (\Exception $e) { Db::rollback(); return ResponseHelper::error($e->getMessage(), $e->getCode()); } } }