mirror of
https://github.com/PowerJob/PowerJob.git
synced 2025-07-17 00:00:04 +08:00
feat: optimize app manager list
This commit is contained in:
parent
7b7582dd91
commit
3ea089eaee
@ -61,7 +61,7 @@ public class DingTalkLoginService implements ThirdPartyLoginService {
|
|||||||
public LoginTypeInfo loginType() {
|
public LoginTypeInfo loginType() {
|
||||||
return new LoginTypeInfo()
|
return new LoginTypeInfo()
|
||||||
.setType(AuthConstants.ACCOUNT_TYPE_DING)
|
.setType(AuthConstants.ACCOUNT_TYPE_DING)
|
||||||
.setName("DingTalkLogin")
|
.setName("DingTalk")
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ import java.util.Optional;
|
|||||||
* @since 2023/3/20
|
* @since 2023/3/20
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
public class PowerJobThirdPartyLoginService implements ThirdPartyLoginService {
|
public class PwjbAccountLoginService implements ThirdPartyLoginService {
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private PwjbUserInfoRepository pwjbUserInfoRepository;
|
private PwjbUserInfoRepository pwjbUserInfoRepository;
|
||||||
@ -37,7 +37,7 @@ public class PowerJobThirdPartyLoginService implements ThirdPartyLoginService {
|
|||||||
public LoginTypeInfo loginType() {
|
public LoginTypeInfo loginType() {
|
||||||
return new LoginTypeInfo()
|
return new LoginTypeInfo()
|
||||||
.setType(AuthConstants.ACCOUNT_TYPE_POWER_JOB)
|
.setType(AuthConstants.ACCOUNT_TYPE_POWER_JOB)
|
||||||
.setName("PowerJob Built-in Login")
|
.setName("PowerJob Account")
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
@ -25,17 +25,18 @@ import tech.powerjob.server.auth.service.WebAuthService;
|
|||||||
import tech.powerjob.server.persistence.PageResult;
|
import tech.powerjob.server.persistence.PageResult;
|
||||||
import tech.powerjob.server.persistence.QueryConvertUtils;
|
import tech.powerjob.server.persistence.QueryConvertUtils;
|
||||||
import tech.powerjob.server.persistence.remote.model.AppInfoDO;
|
import tech.powerjob.server.persistence.remote.model.AppInfoDO;
|
||||||
|
import tech.powerjob.server.persistence.remote.model.NamespaceDO;
|
||||||
import tech.powerjob.server.persistence.remote.repository.AppInfoRepository;
|
import tech.powerjob.server.persistence.remote.repository.AppInfoRepository;
|
||||||
|
import tech.powerjob.server.web.converter.NamespaceConverter;
|
||||||
import tech.powerjob.server.web.request.ComponentUserRoleInfo;
|
import tech.powerjob.server.web.request.ComponentUserRoleInfo;
|
||||||
import tech.powerjob.server.web.request.ModifyAppInfoRequest;
|
import tech.powerjob.server.web.request.ModifyAppInfoRequest;
|
||||||
import tech.powerjob.server.web.request.QueryAppInfoRequest;
|
import tech.powerjob.server.web.request.QueryAppInfoRequest;
|
||||||
import tech.powerjob.server.web.response.AppInfoVO;
|
import tech.powerjob.server.web.response.AppInfoVO;
|
||||||
|
import tech.powerjob.server.web.response.NamespaceBaseVO;
|
||||||
|
import tech.powerjob.server.web.service.NamespaceWebService;
|
||||||
|
|
||||||
import javax.persistence.criteria.Predicate;
|
import javax.persistence.criteria.Predicate;
|
||||||
import java.util.Collections;
|
import java.util.*;
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -54,6 +55,8 @@ public class AppInfoController {
|
|||||||
|
|
||||||
private final AppInfoRepository appInfoRepository;
|
private final AppInfoRepository appInfoRepository;
|
||||||
|
|
||||||
|
private final NamespaceWebService namespaceWebService;
|
||||||
|
|
||||||
@PostMapping("/save")
|
@PostMapping("/save")
|
||||||
@ApiPermission(name = "App-Save", roleScope = RoleScope.APP, dynamicPermissionPlugin = ModifyOrCreateDynamicPermission.class, grandPermissionPlugin = SaveAppGrantPermissionPlugin.class)
|
@ApiPermission(name = "App-Save", roleScope = RoleScope.APP, dynamicPermissionPlugin = ModifyOrCreateDynamicPermission.class, grandPermissionPlugin = SaveAppGrantPermissionPlugin.class)
|
||||||
public ResultDTO<AppInfoVO> saveAppInfo(@RequestBody ModifyAppInfoRequest req) {
|
public ResultDTO<AppInfoVO> saveAppInfo(@RequestBody ModifyAppInfoRequest req) {
|
||||||
@ -172,6 +175,15 @@ public class AppInfoController {
|
|||||||
// 密码
|
// 密码
|
||||||
boolean hasPermission = webAuthService.hasPermission(RoleScope.APP, appInfoDO.getId(), Permission.READ);
|
boolean hasPermission = webAuthService.hasPermission(RoleScope.APP, appInfoDO.getId(), Permission.READ);
|
||||||
appInfoVO.setPassword(hasPermission ? appInfoDO.getPassword() : AuthConstants.TIPS_NO_PERMISSION_TO_SEE);
|
appInfoVO.setPassword(hasPermission ? appInfoDO.getPassword() : AuthConstants.TIPS_NO_PERMISSION_TO_SEE);
|
||||||
|
|
||||||
|
// namespace
|
||||||
|
Optional<NamespaceDO> namespaceOpt = namespaceWebService.findById(appInfoVO.getId());
|
||||||
|
if (namespaceOpt.isPresent()) {
|
||||||
|
NamespaceBaseVO baseNamespace = NamespaceConverter.do2BaseVo(namespaceOpt.get());
|
||||||
|
appInfoVO.setNamespace(baseNamespace);
|
||||||
|
appInfoVO.setNamespaceName(baseNamespace.getName());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return appInfoVO;
|
return appInfoVO;
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package tech.powerjob.server.web.controller;
|
package tech.powerjob.server.web.controller;
|
||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.Page;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import tech.powerjob.common.response.ResultDTO;
|
import tech.powerjob.common.response.ResultDTO;
|
||||||
@ -44,7 +45,7 @@ public class NamespaceController {
|
|||||||
@ResponseBody
|
@ResponseBody
|
||||||
@PostMapping("/save")
|
@PostMapping("/save")
|
||||||
@ApiPermission(name = "Namespace-Save", roleScope = RoleScope.NAMESPACE, dynamicPermissionPlugin = ModifyOrCreateDynamicPermission.class, grandPermissionPlugin = SaveNamespaceGrantPermissionPlugin.class)
|
@ApiPermission(name = "Namespace-Save", roleScope = RoleScope.NAMESPACE, dynamicPermissionPlugin = ModifyOrCreateDynamicPermission.class, grandPermissionPlugin = SaveNamespaceGrantPermissionPlugin.class)
|
||||||
public ResultDTO<NamespaceVO> save(@RequestBody ModifyNamespaceRequest req) {
|
public ResultDTO<NamespaceBaseVO> save(@RequestBody ModifyNamespaceRequest req) {
|
||||||
|
|
||||||
NamespaceDO savedNamespace = namespaceWebService.save(req);
|
NamespaceDO savedNamespace = namespaceWebService.save(req);
|
||||||
return ResultDTO.success(NamespaceConverter.do2BaseVo(savedNamespace));
|
return ResultDTO.success(NamespaceConverter.do2BaseVo(savedNamespace));
|
||||||
@ -65,9 +66,12 @@ public class NamespaceController {
|
|||||||
|
|
||||||
PageResult<NamespaceVO> ret = new PageResult<>(namespacePageResult);
|
PageResult<NamespaceVO> ret = new PageResult<>(namespacePageResult);
|
||||||
ret.setData(namespacePageResult.get().map(x -> {
|
ret.setData(namespacePageResult.get().map(x -> {
|
||||||
NamespaceVO namespaceVO = NamespaceConverter.do2BaseVo(x);
|
NamespaceVO detailVo = new NamespaceVO();
|
||||||
fillPermissionInfo(x, namespaceVO);
|
NamespaceBaseVO baseVO = NamespaceConverter.do2BaseVo(x);
|
||||||
return namespaceVO;
|
BeanUtils.copyProperties(baseVO, detailVo);
|
||||||
|
|
||||||
|
fillPermissionInfo(x, detailVo);
|
||||||
|
return detailVo;
|
||||||
}).collect(Collectors.toList()));
|
}).collect(Collectors.toList()));
|
||||||
|
|
||||||
return ResultDTO.success(ret);
|
return ResultDTO.success(ret);
|
||||||
|
@ -9,7 +9,6 @@ import org.springframework.beans.BeanUtils;
|
|||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import tech.powerjob.common.response.ResultDTO;
|
import tech.powerjob.common.response.ResultDTO;
|
||||||
import tech.powerjob.common.serialize.JsonUtils;
|
|
||||||
import tech.powerjob.server.auth.PowerJobUser;
|
import tech.powerjob.server.auth.PowerJobUser;
|
||||||
import tech.powerjob.server.auth.Role;
|
import tech.powerjob.server.auth.Role;
|
||||||
import tech.powerjob.server.auth.RoleScope;
|
import tech.powerjob.server.auth.RoleScope;
|
||||||
@ -143,11 +142,8 @@ public class UserInfoController {
|
|||||||
if (namespaceDO == null) {
|
if (namespaceDO == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
NamespaceBaseVO namespaceBaseVO = JsonUtils.parseObjectIgnoreException(JsonUtils.toJSONString(NamespaceConverter.do2BaseVo(namespaceDO)), NamespaceBaseVO.class);
|
NamespaceBaseVO namespaceBaseVO = NamespaceConverter.do2BaseVo(namespaceDO);
|
||||||
if (namespaceBaseVO != null) {
|
namespaceBaseVOS.add(namespaceBaseVO);
|
||||||
namespaceBaseVO.genShowName();
|
|
||||||
namespaceBaseVOS.add(namespaceBaseVO);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
userDetailVO.setRole2NamespaceList(role2NamespaceBaseVo);
|
userDetailVO.setRole2NamespaceList(role2NamespaceBaseVo);
|
||||||
|
@ -4,7 +4,7 @@ import org.springframework.beans.BeanUtils;
|
|||||||
import tech.powerjob.common.utils.CommonUtils;
|
import tech.powerjob.common.utils.CommonUtils;
|
||||||
import tech.powerjob.server.common.constants.SwitchableStatus;
|
import tech.powerjob.server.common.constants.SwitchableStatus;
|
||||||
import tech.powerjob.server.persistence.remote.model.NamespaceDO;
|
import tech.powerjob.server.persistence.remote.model.NamespaceDO;
|
||||||
import tech.powerjob.server.web.response.NamespaceVO;
|
import tech.powerjob.server.web.response.NamespaceBaseVO;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* NamespaceConverter
|
* NamespaceConverter
|
||||||
@ -14,12 +14,14 @@ import tech.powerjob.server.web.response.NamespaceVO;
|
|||||||
*/
|
*/
|
||||||
public class NamespaceConverter {
|
public class NamespaceConverter {
|
||||||
|
|
||||||
public static NamespaceVO do2BaseVo(NamespaceDO d) {
|
public static NamespaceBaseVO do2BaseVo(NamespaceDO d) {
|
||||||
NamespaceVO v = new NamespaceVO();
|
NamespaceBaseVO v = new NamespaceBaseVO();
|
||||||
BeanUtils.copyProperties(d, v);
|
BeanUtils.copyProperties(d, v);
|
||||||
v.setGmtCreateStr(CommonUtils.formatTime(d.getGmtCreate()));
|
v.setGmtCreateStr(CommonUtils.formatTime(d.getGmtCreate()));
|
||||||
v.setGmtModifiedStr(CommonUtils.formatTime(d.getGmtModified()));
|
v.setGmtModifiedStr(CommonUtils.formatTime(d.getGmtModified()));
|
||||||
v.setStatusStr(SwitchableStatus.of(d.getStatus()).name());
|
v.setStatusStr(SwitchableStatus.of(d.getStatus()).name());
|
||||||
|
|
||||||
|
v.genShowName();
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,5 +44,8 @@ public class ModifyAppInfoRequest {
|
|||||||
throw new PowerJobException("appName can't contains white space!");
|
throw new PowerJobException("appName can't contains white space!");
|
||||||
}
|
}
|
||||||
CommonUtils.requireNonNull(password, "password can't be empty");
|
CommonUtils.requireNonNull(password, "password can't be empty");
|
||||||
|
|
||||||
|
// 后续版本强制要求设置 namespace,方便统一管理
|
||||||
|
CommonUtils.requireNonNull(namespaceId, "namespace can't be empty");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,4 +37,11 @@ public class AppInfoVO extends AppBaseVO {
|
|||||||
private String creator;
|
private String creator;
|
||||||
|
|
||||||
private String modifier;
|
private String modifier;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Namespace Info
|
||||||
|
*/
|
||||||
|
private NamespaceBaseVO namespace;
|
||||||
|
|
||||||
|
private String namespaceName;
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import lombok.Getter;
|
|||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* namespace 基本 VO 对象,用于列表渲染
|
* namespace 基本 VO 对象,用于列表渲染
|
||||||
@ -27,6 +28,21 @@ public class NamespaceBaseVO implements Serializable {
|
|||||||
*/
|
*/
|
||||||
protected String name;
|
protected String name;
|
||||||
|
|
||||||
|
private Integer status;
|
||||||
|
private String statusStr;
|
||||||
|
|
||||||
|
private Date gmtCreate;
|
||||||
|
|
||||||
|
private String gmtCreateStr;
|
||||||
|
|
||||||
|
private Date gmtModified;
|
||||||
|
|
||||||
|
private String gmtModifiedStr;
|
||||||
|
|
||||||
|
private String creator;
|
||||||
|
|
||||||
|
private String modifier;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 前端名称(拼接 code + name,更容易辨认)
|
* 前端名称(拼接 code + name,更容易辨认)
|
||||||
*/
|
*/
|
||||||
|
@ -5,8 +5,6 @@ import lombok.Setter;
|
|||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
import tech.powerjob.server.web.request.ComponentUserRoleInfo;
|
import tech.powerjob.server.web.request.ComponentUserRoleInfo;
|
||||||
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 基础版本的命名空间
|
* 基础版本的命名空间
|
||||||
*
|
*
|
||||||
@ -21,26 +19,11 @@ public class NamespaceVO extends NamespaceBaseVO {
|
|||||||
private String dept;
|
private String dept;
|
||||||
private String tags;
|
private String tags;
|
||||||
|
|
||||||
private Integer status;
|
|
||||||
private String statusStr;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 扩展字段
|
* 扩展字段
|
||||||
*/
|
*/
|
||||||
private String extra;
|
private String extra;
|
||||||
|
|
||||||
private Date gmtCreate;
|
|
||||||
|
|
||||||
private String gmtCreateStr;
|
|
||||||
|
|
||||||
private Date gmtModified;
|
|
||||||
|
|
||||||
private String gmtModifiedStr;
|
|
||||||
|
|
||||||
private String creator;
|
|
||||||
|
|
||||||
private String modifier;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 访问 token
|
* 访问 token
|
||||||
* 仅拥有当前 namespace 权限的访问者可见
|
* 仅拥有当前 namespace 权限的访问者可见
|
||||||
|
@ -6,6 +6,7 @@ import tech.powerjob.server.web.request.ModifyNamespaceRequest;
|
|||||||
import tech.powerjob.server.web.request.QueryNamespaceRequest;
|
import tech.powerjob.server.web.request.QueryNamespaceRequest;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* namespace web 服务
|
* namespace web 服务
|
||||||
@ -19,6 +20,8 @@ public interface NamespaceWebService {
|
|||||||
|
|
||||||
void delete(Long id);
|
void delete(Long id);
|
||||||
|
|
||||||
|
Optional<NamespaceDO> findById(Long id);
|
||||||
|
|
||||||
Page<NamespaceDO> list(QueryNamespaceRequest queryNamespaceRequest);
|
Page<NamespaceDO> list(QueryNamespaceRequest queryNamespaceRequest);
|
||||||
|
|
||||||
List<NamespaceDO> listAll();
|
List<NamespaceDO> listAll();
|
||||||
|
@ -101,6 +101,14 @@ public class NamespaceWebServiceImpl implements NamespaceWebService {
|
|||||||
namespaceRepository.deleteById(id);
|
namespaceRepository.deleteById(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<NamespaceDO> findById(Long id) {
|
||||||
|
if (id == null) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
return namespaceRepository.findById(id);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Page<NamespaceDO> list(QueryNamespaceRequest queryNamespaceRequest) {
|
public Page<NamespaceDO> list(QueryNamespaceRequest queryNamespaceRequest) {
|
||||||
String codeLike = queryNamespaceRequest.getCodeLike();
|
String codeLike = queryNamespaceRequest.getCodeLike();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user