forked from github/cool-admin-java
feat: 组织模块授权、成员管理分页、角色创建修复
- AppOrgEntity: 添加 @JsonIgnoreProperties(ignoreUnknown=true) 支持moduleKeys参数 - AppOrgServiceImpl: modifyAfter钩子处理UPDATE时自动授权模块 - AppOrgServiceImpl: createOrg中设置role.userId修复NOT NULL约束 - AppOrgServiceImpl: updatePerms第三个参数null改为new Long[0]避免NPE - AppOrgUserServiceImpl: getMemberList支持分页+可选orgId筛选+组织名称关联 - AdminAppOrgUserController: memberList接口支持page/size分页参数 - AppOrgUserController: App端同步更新getMemberList调用
This commit is contained in:
@@ -28,12 +28,14 @@ public class AdminAppOrgUserController extends BaseController<AppOrgUserService,
|
||||
setPageOption(createOp());
|
||||
}
|
||||
|
||||
@Operation(summary = "获取组织成员列表")
|
||||
@Operation(summary = "获取组织成员列表(分页)")
|
||||
@PostMapping("/memberList")
|
||||
public R memberList(@RequestAttribute JSONObject requestParams) {
|
||||
Long orgId = requestParams.getLong("orgId");
|
||||
List<Map<String, Object>> members = appOrgUserService.getMemberListByOrgId(orgId);
|
||||
return R.ok(members);
|
||||
Integer page = requestParams.getInt("page");
|
||||
Integer size = requestParams.getInt("size");
|
||||
Map<String, Object> result = appOrgUserService.getMemberList(orgId, page, size);
|
||||
return R.ok(result);
|
||||
}
|
||||
|
||||
@Operation(summary = "提升/降级App端管理员")
|
||||
|
||||
@@ -8,7 +8,6 @@ import com.cool.core.util.CoolSecurityUtil;
|
||||
import com.cool.modules.org.service.AppOrgUserService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
@@ -27,7 +26,7 @@ public class AppOrgUserController {
|
||||
Long orgId = requestParams.getLong("orgId");
|
||||
Long userId = CoolSecurityUtil.getCurrentUserId();
|
||||
CoolPreconditions.check(!appOrgUserService.isOrgMember(userId, orgId), "无权查看该组织成员");
|
||||
List<Map<String, Object>> members = appOrgUserService.getMemberListByOrgId(orgId);
|
||||
Map<String, Object> members = appOrgUserService.getMemberList(orgId, null, null);
|
||||
return R.ok(members);
|
||||
}
|
||||
|
||||
|
||||
@@ -4,11 +4,13 @@ import com.cool.core.base.BaseEntity;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
import com.cool.core.annotation.ColumnDefine;
|
||||
import com.tangzc.mybatisflex.autotable.annotation.UniIndex;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||
@Table(value = "app_org", comment = "组织表")
|
||||
public class AppOrgEntity extends BaseEntity<AppOrgEntity> {
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ public interface AppOrgUserService extends BaseService<AppOrgUserEntity> {
|
||||
|
||||
List<Map<String, Object>> getOrgListByUserId(Long userId);
|
||||
|
||||
List<Map<String, Object>> getMemberListByOrgId(Long orgId);
|
||||
Map<String, Object> getMemberList(Long orgId, Integer page, Integer size);
|
||||
|
||||
boolean isOrgAdmin(Long userId, Long orgId);
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ import cn.hutool.json.JSONObject;
|
||||
import com.cool.core.base.BaseServiceImpl;
|
||||
import com.cool.core.cache.CoolCache;
|
||||
import com.cool.core.enums.UserTypeEnum;
|
||||
import com.cool.core.base.ModifyEnum;
|
||||
import com.cool.core.exception.CoolPreconditions;
|
||||
import com.cool.core.security.jwt.JwtTokenUtil;
|
||||
import com.cool.core.security.jwt.JwtUser;
|
||||
@@ -47,6 +48,16 @@ public class AppOrgServiceImpl extends BaseServiceImpl<AppOrgMapper, AppOrgEntit
|
||||
private final CoolCache coolCache;
|
||||
private final JwtTokenUtil jwtTokenUtil;
|
||||
|
||||
@Override
|
||||
public void modifyAfter(JSONObject requestParams, AppOrgEntity entity, ModifyEnum type) {
|
||||
if (type == ModifyEnum.UPDATE && requestParams != null && requestParams.containsKey("moduleKeys")) {
|
||||
List<String> moduleKeys = requestParams.getBeanList("moduleKeys", String.class);
|
||||
if (moduleKeys != null) {
|
||||
authorizeModules(entity.getId(), moduleKeys);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void createOrg(JSONObject requestParams, AppOrgEntity entity) {
|
||||
@@ -55,7 +66,9 @@ public class AppOrgServiceImpl extends BaseServiceImpl<AppOrgMapper, AppOrgEntit
|
||||
|
||||
Long orgId = entity.getId();
|
||||
|
||||
Long currentUserId = com.cool.core.util.CoolSecurityUtil.getCurrentUserId();
|
||||
BaseSysRoleEntity role = new BaseSysRoleEntity();
|
||||
role.setUserId(currentUserId);
|
||||
role.setName(entity.getName() + "管理员");
|
||||
role.setLabel("org_admin_" + orgId);
|
||||
role.setRemark("组织[" + entity.getName() + "]自动创建的管理角色");
|
||||
@@ -128,7 +141,7 @@ public class AppOrgServiceImpl extends BaseServiceImpl<AppOrgMapper, AppOrgEntit
|
||||
}
|
||||
}
|
||||
}
|
||||
baseSysPermsService.updatePerms(role.getId(), menuIds.toArray(new Long[0]), null);
|
||||
baseSysPermsService.updatePerms(role.getId(), menuIds.toArray(new Long[0]), new Long[0]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -135,27 +135,46 @@ public class AppOrgUserServiceImpl extends BaseServiceImpl<AppOrgUserMapper, App
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Map<String, Object>> getMemberListByOrgId(Long orgId) {
|
||||
List<AppOrgUserEntity> orgUsers = list(QueryWrapper.create()
|
||||
.eq(AppOrgUserEntity::getOrgId, orgId)
|
||||
.eq(AppOrgUserEntity::getStatus, 1));
|
||||
public Map<String, Object> getMemberList(Long orgId, Integer page, Integer size) {
|
||||
int pageNum = (page != null && page > 0) ? page : 1;
|
||||
int pageSize = (size != null && size > 0) ? size : 10;
|
||||
|
||||
List<Map<String, Object>> result = new ArrayList<>();
|
||||
for (AppOrgUserEntity ou : orgUsers) {
|
||||
QueryWrapper qw = QueryWrapper.create()
|
||||
.eq(AppOrgUserEntity::getStatus, 1);
|
||||
if (orgId != null) {
|
||||
qw.eq(AppOrgUserEntity::getOrgId, orgId);
|
||||
}
|
||||
qw.orderBy(AppOrgUserEntity::getJoinTime, false);
|
||||
|
||||
com.mybatisflex.core.paginate.Page<AppOrgUserEntity> pg = page(
|
||||
com.mybatisflex.core.paginate.Page.of(pageNum, pageSize), qw);
|
||||
|
||||
List<Map<String, Object>> list = new ArrayList<>();
|
||||
for (AppOrgUserEntity ou : pg.getRecords()) {
|
||||
Map<String, Object> item = new HashMap<>();
|
||||
item.put("id", ou.getId());
|
||||
item.put("userId", ou.getUserId());
|
||||
item.put("orgId", ou.getOrgId());
|
||||
item.put("role", ou.getRole());
|
||||
item.put("joinTime", ou.getJoinTime());
|
||||
|
||||
AppOrgEntity org = appOrgMapper.selectOneById(ou.getOrgId());
|
||||
if (org != null) {
|
||||
item.put("orgName", org.getName());
|
||||
}
|
||||
|
||||
UserInfoEntity user = userInfoMapper.selectOneById(ou.getUserId());
|
||||
if (user != null) {
|
||||
item.put("nickName", user.getNickName());
|
||||
item.put("avatarUrl", user.getAvatarUrl());
|
||||
item.put("phone", user.getPhone());
|
||||
}
|
||||
result.add(item);
|
||||
list.add(item);
|
||||
}
|
||||
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
result.put("list", list);
|
||||
result.put("pagination", Map.of("total", pg.getTotalRow(), "page", pageNum, "size", pageSize));
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user