This commit is contained in:
@@ -1,10 +1,17 @@
|
||||
package com.yunhai.userbase.controller.oapi;
|
||||
|
||||
import com.yunhai.platform.utils.model.BoaGroup;
|
||||
import com.yunhai.userbase.common.validation.ValidationGroups;
|
||||
import com.yunhai.userbase.config.Config;
|
||||
import com.yunhai.userbase.model.sysgroup.SysGroupBatchRequest;
|
||||
import com.yunhai.userbase.model.sysgroup.SysGroupRequest;
|
||||
import com.yunhai.userbase.service.ISysGroupService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
@@ -60,4 +67,38 @@ public class GroupController {
|
||||
@RequestParam(value = "withSub", required = false) Boolean withSub) {
|
||||
return sysGroupService.getGroupList(ids, withSub);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增组:返回创建后的组节点(含 id)。<br>
|
||||
* 层级类型约束、根节点保护等复用后台逻辑;鉴权由 OpenApiAuthEnforceConfiguration 在过滤器层强制签名。
|
||||
*/
|
||||
@PostMapping("add")
|
||||
public BoaGroup add(@RequestBody @Validated(ValidationGroups.Create.class) SysGroupRequest request) {
|
||||
return sysGroupService.add(request);
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑组(不含移动,移动请走 group/move 后台接口):返回更新后的组节点(含 id)。
|
||||
*/
|
||||
@PostMapping("edit/{id}")
|
||||
public BoaGroup edit(@PathVariable Integer id,
|
||||
@RequestBody @Validated(ValidationGroups.Update.class) SysGroupRequest request) {
|
||||
return sysGroupService.edit(id, request);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除组:组下存在子组或用户时拒绝删除(根节点不可删)。无返回值。
|
||||
*/
|
||||
@PostMapping("delete/{id}")
|
||||
public void delete(@PathVariable Integer id) {
|
||||
sysGroupService.delete(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量新增子组:请求体 { pid, type, items:[{name},...] },返回创建后的组节点列表(均含 id)。
|
||||
*/
|
||||
@PostMapping("batchAdd")
|
||||
public List<BoaGroup> batchAdd(@RequestBody @Validated SysGroupBatchRequest request) {
|
||||
return sysGroupService.batchAdd(request);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,20 +5,29 @@ import com.yunhai.platform.utils.exception.DException;
|
||||
import com.yunhai.platform.utils.model.BoaGroup;
|
||||
import com.yunhai.platform.utils.model.BoaModule;
|
||||
import com.yunhai.platform.utils.model.BoaUser;
|
||||
import com.yunhai.userbase.common.validation.ValidationGroups;
|
||||
import com.yunhai.userbase.config.Config;
|
||||
import com.yunhai.userbase.entity.ApplicationInfo;
|
||||
import com.yunhai.userbase.model.sysuser.SysUserMoveRequest;
|
||||
import com.yunhai.userbase.model.sysuser.SysUserRequest;
|
||||
import com.yunhai.userbase.repository.ApplicationInfoRepository;
|
||||
import com.yunhai.userbase.service.IGroupAuthzService;
|
||||
import com.yunhai.userbase.service.ISysUserService;
|
||||
import com.yunhai.userbase.service.impl.UserCenterService;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
@@ -41,6 +50,9 @@ public class UserController {
|
||||
@Autowired
|
||||
private UserCenterService userCenterService;
|
||||
|
||||
@Autowired
|
||||
private ISysUserService sysUserService;
|
||||
|
||||
@Autowired
|
||||
private IGroupAuthzService groupAuthzService;
|
||||
|
||||
@@ -130,28 +142,61 @@ public class UserController {
|
||||
return app.getId();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 按「schId 为空时」解析出用户主学校/主组作为模块查询的上下文组ID。<br>
|
||||
* 保留方法(逻辑已下沉到 Service.resolveEffectiveGroupId 复用),不再被 modules() 使用。
|
||||
* 新增用户:走完整校验(账号唯一/手机号/身份证/密码强度),BCrypt 加密并写入组关联;
|
||||
* 返回创建后的用户(含 id 与组织链)。<br>
|
||||
* 鉴权由 OpenApiAuthEnforceConfiguration 在过滤器层强制签名;此处不记操作日志(避免明文密码写入 request_params)。
|
||||
*/
|
||||
@Deprecated
|
||||
private Integer resolveEffectiveGroupId(Integer userId, Integer schId) {
|
||||
if (schId != null) {
|
||||
return schId;
|
||||
@PostMapping("add")
|
||||
public BoaUser add(@RequestBody @Validated(ValidationGroups.Create.class) SysUserRequest request) {
|
||||
Integer id = sysUserService.add(request);
|
||||
return userCenterService.getUserInfoWithDeptById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑用户:密码为空时不修改密码;返回更新后的用户(含 id 与组织链)。
|
||||
*/
|
||||
@PostMapping("edit/{id}")
|
||||
public BoaUser edit(@PathVariable Integer id,
|
||||
@RequestBody @Validated(ValidationGroups.Update.class) SysUserRequest request) {
|
||||
sysUserService.edit(id, request);
|
||||
return userCenterService.getUserInfoWithDeptById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除用户(按组解绑,语义同管理端「从组中删除用户」):仅解除该用户与指定组的关联;<br>
|
||||
* 仅当用户已无任何组关联时,才级联删除 sys_user 及其角色绑定。<br>
|
||||
* 这样多校用户只会被退出指定学校,而不会被整体误删。<br>
|
||||
* 若用户仅归属这一个组,调用后该用户将被真正删除(组关联清空即触发级联删)。
|
||||
*/
|
||||
@PostMapping("delete/{id}/{groupId}")
|
||||
public void delete(@PathVariable Integer id, @PathVariable Integer groupId) {
|
||||
sysUserService.deleteFromGroup(id, groupId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量新增用户:逐条走完整校验(含密码强度,每条需携带 password + confirmPassword);
|
||||
* 返回创建后的用户列表(顺序与入参一致,均含 id 与组织链)。
|
||||
*/
|
||||
@PostMapping("batchAdd")
|
||||
public List<BoaUser> batchAdd(@RequestBody List<SysUserRequest> requests) {
|
||||
List<Integer> ids = sysUserService.batchAdd(requests);
|
||||
List<BoaUser> result = new ArrayList<>();
|
||||
for (Integer id : ids) {
|
||||
result.add(userCenterService.getUserInfoWithDeptById(id));
|
||||
}
|
||||
BoaUser boa = userCenterService.getUserInfoWithDeptById(userId);
|
||||
if (boa == null) {
|
||||
return null;
|
||||
}
|
||||
BoaGroup school = boa.getSchool();
|
||||
if (school != null && school.getId() != null) {
|
||||
return school.getId();
|
||||
}
|
||||
List<BoaGroup> groups = boa.getGroups();
|
||||
if (groups != null && !groups.isEmpty()) {
|
||||
BoaGroup main = groups.get(0);
|
||||
return main == null ? null : main.getId();
|
||||
}
|
||||
return null;
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 移动用户到指定组:仅允许在同一学校(组)范围内移动——用户当前必须已在该学校子树内,
|
||||
* 且目标组也必须在该学校子树内,否则拒绝(禁止跨校移动)。<br>
|
||||
* 语义同后台「调整组」——覆盖式把用户组归属替换为目标组(目标设为主组)。返回移动后的用户(含新的组织链)。
|
||||
*/
|
||||
@PostMapping("moveToGroup")
|
||||
public BoaUser moveToGroup(@RequestBody @Validated SysUserMoveRequest request) {
|
||||
sysUserService.moveUserWithinSchool(request.getUserId(), request.getGroupId(), request.getSchoolId());
|
||||
return userCenterService.getUserInfoWithDeptById(request.getUserId());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user