From f52a9a4ef0ef574aff88acf28b49d58f5c733cfb Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期三, 30 九月 2026 12:18:25 +0800
Subject: [PATCH] 修改权限控制
---
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TGroupCompanyServiceImpl.java | 58 ++++++++++++++++++++++++++++++++++++++++++++--------------
1 files changed, 44 insertions(+), 14 deletions(-)
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TGroupCompanyServiceImpl.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TGroupCompanyServiceImpl.java
index ee2495f..28eb07a 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TGroupCompanyServiceImpl.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TGroupCompanyServiceImpl.java
@@ -431,7 +431,7 @@
if (old == null) {
return AjaxResult.error("公司不存在");
}
- // 编辑时账号只读(前端禁用),此处兼容外部调用方传入账号的场景:唯一性校验(排除自身)
+ // 编辑支持修改登录账号:公司表唯一性校验(排除自身)
if (StringUtils.hasText(company.getAccount())) {
if (accountExists(company.getAccount(), company.getId())) {
return AjaxResult.error("登录账号不能重复");
@@ -439,17 +439,36 @@
}
String account = StringUtils.hasText(company.getAccount()) ? company.getAccount() : old.getAccount();
if (StringUtils.hasText(account)) {
- syncCompanyUserOnEdit(company, account);
+ String error = syncCompanyUserOnEdit(company, old.getAccount(), account);
+ if (error != null) {
+ return AjaxResult.error(error);
+ }
}
updateById(company);
return AjaxResult.success();
}
/**
- * 编辑公司时同步登录账号:存在则仅更新账号资料(不修改密码),不存在则补建
+ * 编辑公司时同步登录账号:按旧账号定位用户后更新为新账号(支持改账号);
+ * 密码有值时重置(留空不修改);用户不存在则按新账号补建
+ *
+ * @return 冲突等业务错误信息,null 表示成功
*/
- private void syncCompanyUserOnEdit(TGroupCompany company, String account) {
- R<SysUser> userR = sysUserClient.queryUserByUserName(account);
+ private String syncCompanyUserOnEdit(TGroupCompany company, String oldAccount, String newAccount) {
+ // 账号变更时校验新账号未被其他用户占用(updateSysUser 无唯一性校验,需在此前置拦截)
+ if (StringUtils.hasText(oldAccount) && !newAccount.equals(oldAccount)) {
+ R<SysUser> occupantR = sysUserClient.queryUserByUserName(newAccount);
+ SysUser occupant = occupantR == null ? null : occupantR.getData();
+ if (occupant != null) {
+ R<SysUser> ownerR = sysUserClient.queryUserByUserName(oldAccount);
+ SysUser owner = ownerR == null ? null : ownerR.getData();
+ if (owner == null || !occupant.getUserId().equals(owner.getUserId())) {
+ return "登录账号不能重复";
+ }
+ }
+ }
+ // 按旧账号定位既有用户(账号未变时与新账号一致),避免改名后误走补建导致双账号
+ R<SysUser> userR = sysUserClient.queryUserByUserName(StringUtils.hasText(oldAccount) ? oldAccount : newAccount);
SysUser user = userR == null ? null : userR.getData();
if (user == null) {
if (!StringUtils.hasText(company.getPassword())) {
@@ -457,7 +476,7 @@
}
Long roleId = resolveCompanyRoleId();
SysUser newUser = new SysUser();
- newUser.setUserName(account);
+ newUser.setUserName(newAccount);
newUser.setNickName(company.getName());
newUser.setPhonenumber(company.getContactPhone());
newUser.setPassword(company.getPassword());
@@ -467,22 +486,33 @@
newUser.setRoleType(COMPANY_ROLE_TYPE);
newUser.setObjectId(company.getId());
newUser.setPassWordUpdate(new Date());
- R<Long> r = sysUserClient.addSysUser(newUser);
- if (r == null || 200 != r.getCode()) {
- throw new RuntimeException(r == null ? "创建登录账号失败" : r.getMsg());
+ R<Long> addR = sysUserClient.addSysUser(newUser);
+ if (addR == null || 200 != addR.getCode()) {
+ throw new RuntimeException(addR == null ? "创建登录账号失败" : addR.getMsg());
}
- return;
+ return null;
}
// 远程查询返回的密码字段可能是哈希或脱敏值,显式清空避免再次写回
user.setPassword(null);
user.setPassWordUpdate(null);
- user.setUserName(account);
+ user.setUserName(newAccount);
user.setNickName(company.getName());
user.setPhonenumber(company.getContactPhone());
- R<Boolean> r = sysUserClient.updateSysUser(user);
- if (r == null || 200 != r.getCode()) {
- throw new RuntimeException(r == null ? "更新登录账号失败" : r.getMsg());
+ R<Boolean> updateR = sysUserClient.updateSysUser(user);
+ if (updateR == null || 200 != updateR.getCode()) {
+ throw new RuntimeException(updateR == null ? "更新登录账号失败" : updateR.getMsg());
}
+ // 密码有值时重置(前端已 HMAC-MD5,由 system 侧 BCrypt 落库,与新增链路一致)
+ if (StringUtils.hasText(company.getPassword())) {
+ SysUser pwdUser = new SysUser();
+ pwdUser.setUserId(user.getUserId());
+ pwdUser.setPassword(company.getPassword());
+ R pwdR = sysUserClient.resetPassword(pwdUser);
+ if (pwdR == null || 200 != pwdR.getCode()) {
+ throw new RuntimeException(pwdR == null ? "重置登录密码失败" : pwdR.getMsg());
+ }
+ }
+ return null;
}
@Override
--
Gitblit v1.7.1