mirror of https://gitee.com/topiam/eiam
添加应用支持应用分组
parent
31b658372a
commit
7310f9fa5d
|
@ -17,6 +17,8 @@
|
|||
*/
|
||||
package cn.topiam.employee.application;
|
||||
|
||||
import cn.topiam.employee.common.entity.app.AppGroupAssociationEntity;
|
||||
import cn.topiam.employee.common.repository.app.AppGroupAssociationRepository;
|
||||
import org.apache.commons.lang3.RandomStringUtils;
|
||||
import org.springframework.util.AlternativeJdkIdGenerator;
|
||||
import org.springframework.util.IdGenerator;
|
||||
|
@ -33,6 +35,9 @@ import cn.topiam.employee.common.repository.app.AppRepository;
|
|||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* AbstractApplicationService
|
||||
*
|
||||
|
@ -55,7 +60,7 @@ public abstract class AbstractApplicationService implements ApplicationService {
|
|||
}
|
||||
|
||||
@Override
|
||||
public AppEntity createApp(String name, String icon, String remark, Long groupId,
|
||||
public AppEntity createApp(String name, String icon, String remark, Long[] groupId,
|
||||
InitLoginType initLoginType, AuthorizationType authorizationType) {
|
||||
AppEntity appEntity = new AppEntity();
|
||||
appEntity.setName(name);
|
||||
|
@ -70,28 +75,44 @@ public abstract class AbstractApplicationService implements ApplicationService {
|
|||
appEntity.setInitLoginType(initLoginType);
|
||||
appEntity.setAuthorizationType(authorizationType);
|
||||
appEntity.setRemark(remark);
|
||||
return appRepository.save(appEntity);
|
||||
appRepository.save(appEntity);
|
||||
List<AppGroupAssociationEntity> list = new ArrayList<>();
|
||||
for (Long id : groupId) {
|
||||
AppGroupAssociationEntity appGroupAssociationEntity = new AppGroupAssociationEntity();
|
||||
appGroupAssociationEntity.setGroupId(id);
|
||||
appGroupAssociationEntity.setAppId(appEntity.getId());
|
||||
list.add(appGroupAssociationEntity);
|
||||
}
|
||||
appGroupAssociationRepository.saveAll(list);
|
||||
return appEntity;
|
||||
}
|
||||
|
||||
/**
|
||||
* AppAccountRepository
|
||||
*/
|
||||
protected final AppAccountRepository appAccountRepository;
|
||||
protected final AppAccountRepository appAccountRepository;
|
||||
|
||||
/**
|
||||
* AppGroupAssociationRepository
|
||||
*/
|
||||
protected final AppGroupAssociationRepository appGroupAssociationRepository;
|
||||
|
||||
/**
|
||||
* ApplicationRepository
|
||||
*/
|
||||
protected final AppRepository appRepository;
|
||||
protected final AppRepository appRepository;
|
||||
|
||||
/**
|
||||
* IdGenerator
|
||||
*/
|
||||
protected final IdGenerator idGenerator;
|
||||
protected final IdGenerator idGenerator;
|
||||
|
||||
protected AbstractApplicationService(AppAccountRepository appAccountRepository,
|
||||
AppGroupAssociationRepository appGroupAssociationRepository,
|
||||
AppRepository appRepository) {
|
||||
this.appAccountRepository = appAccountRepository;
|
||||
this.appRepository = appRepository;
|
||||
this.appGroupAssociationRepository = appGroupAssociationRepository;
|
||||
this.idGenerator = new AlternativeJdkIdGenerator();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,6 +22,7 @@ import java.time.LocalDateTime;
|
|||
import java.time.ZoneId;
|
||||
import java.util.Date;
|
||||
|
||||
import cn.topiam.employee.common.repository.app.*;
|
||||
import org.bouncycastle.asn1.x500.X500Name;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
@ -32,10 +33,6 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
|||
|
||||
import cn.topiam.employee.common.entity.app.AppCertEntity;
|
||||
import cn.topiam.employee.common.enums.app.AppCertUsingType;
|
||||
import cn.topiam.employee.common.repository.app.AppAccessPolicyRepository;
|
||||
import cn.topiam.employee.common.repository.app.AppAccountRepository;
|
||||
import cn.topiam.employee.common.repository.app.AppCertRepository;
|
||||
import cn.topiam.employee.common.repository.app.AppRepository;
|
||||
import cn.topiam.employee.support.exception.TopIamException;
|
||||
import cn.topiam.employee.support.util.CertUtils;
|
||||
import cn.topiam.employee.support.util.RsaUtils;
|
||||
|
@ -128,8 +125,9 @@ public abstract class AbstractCertificateApplicationService extends AbstractAppl
|
|||
protected AbstractCertificateApplicationService(AppCertRepository appCertRepository,
|
||||
AppAccountRepository appAccountRepository,
|
||||
AppAccessPolicyRepository appAccessPolicyRepository,
|
||||
AppGroupAssociationRepository appGroupAssociationRepository,
|
||||
AppRepository appRepository) {
|
||||
super(appAccountRepository, appRepository);
|
||||
super(appAccountRepository, appGroupAssociationRepository, appRepository);
|
||||
this.appCertRepository = appCertRepository;
|
||||
this.appAccessPolicyRepository = appAccessPolicyRepository;
|
||||
this.idGenerator = new AlternativeJdkIdGenerator();
|
||||
|
|
|
@ -96,7 +96,7 @@ public interface ApplicationService {
|
|||
* @return {@link Long} 应用ID
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
String create(String name, String icon, String remark, Long groupId);
|
||||
String create(String name, String icon, String remark, Long[] groupId);
|
||||
|
||||
/**
|
||||
* 删除应用
|
||||
|
@ -142,6 +142,6 @@ public interface ApplicationService {
|
|||
* @param authorizationType {@link AuthorizationType}
|
||||
* @return {@link AppEntity}
|
||||
*/
|
||||
AppEntity createApp(String name, String icon, String remark, Long groupId,
|
||||
AppEntity createApp(String name, String icon, String remark, Long[] groupId,
|
||||
InitLoginType initLoginType, AuthorizationType authorizationType);
|
||||
}
|
||||
|
|
|
@ -26,6 +26,7 @@ import cn.topiam.employee.common.entity.app.AppFormConfigEntity;
|
|||
import cn.topiam.employee.common.entity.app.po.AppFormConfigPO;
|
||||
import cn.topiam.employee.common.repository.app.AppAccountRepository;
|
||||
import cn.topiam.employee.common.repository.app.AppFormConfigRepository;
|
||||
import cn.topiam.employee.common.repository.app.AppGroupAssociationRepository;
|
||||
import cn.topiam.employee.common.repository.app.AppRepository;
|
||||
|
||||
/**
|
||||
|
@ -83,8 +84,9 @@ public abstract class AbstractFormApplicationService extends AbstractApplication
|
|||
|
||||
protected AbstractFormApplicationService(AppRepository appRepository,
|
||||
AppAccountRepository appAccountRepository,
|
||||
AppGroupAssociationRepository appGroupAssociationRepository,
|
||||
AppFormConfigRepository appFormConfigRepository) {
|
||||
super(appAccountRepository, appRepository);
|
||||
super(appAccountRepository, appGroupAssociationRepository, appRepository);
|
||||
this.appFormConfigRepository = appFormConfigRepository;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,6 +21,7 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
import cn.topiam.employee.common.repository.app.AppGroupAssociationRepository;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
|
@ -199,7 +200,7 @@ public class FormStandardApplicationServiceImpl extends AbstractFormApplicationS
|
|||
* @param groupId {@link Long} 分组id
|
||||
*/
|
||||
@Override
|
||||
public String create(String name, String icon, String remark, Long groupId) {
|
||||
public String create(String name, String icon, String remark, Long[] groupId) {
|
||||
//1、创建应用
|
||||
AppEntity appEntity = createApp(name, icon, remark, groupId, InitLoginType.PORTAL_OR_APP,
|
||||
AuthorizationType.AUTHORIZATION);
|
||||
|
@ -216,8 +217,10 @@ public class FormStandardApplicationServiceImpl extends AbstractFormApplicationS
|
|||
protected FormStandardApplicationServiceImpl(AppAccountRepository appAccountRepository,
|
||||
AppFormConfigRepository appFormConfigRepository,
|
||||
AppRepository appRepository,
|
||||
AppGroupAssociationRepository appGroupAssociationRepository,
|
||||
AppFormConfigConverter appFormConfigConverter) {
|
||||
super(appRepository, appAccountRepository, appFormConfigRepository);
|
||||
super(appRepository, appAccountRepository, appGroupAssociationRepository,
|
||||
appFormConfigRepository);
|
||||
this.appFormConfigConverter = appFormConfigConverter;
|
||||
}
|
||||
|
||||
|
|
|
@ -102,8 +102,10 @@ public abstract class AbstractJwtCertificateApplicationService extends
|
|||
AppCertRepository appCertRepository,
|
||||
AppRepository appRepository,
|
||||
AppAccountRepository appAccountRepository,
|
||||
AppGroupAssociationRepository appGroupAssociationRepository,
|
||||
AppAccessPolicyRepository appAccessPolicyRepository) {
|
||||
super(appCertRepository, appAccountRepository, appAccessPolicyRepository, appRepository);
|
||||
super(appCertRepository, appAccountRepository, appAccessPolicyRepository,
|
||||
appGroupAssociationRepository, appRepository);
|
||||
this.appCertRepository = appCertRepository;
|
||||
this.appRepository = appRepository;
|
||||
this.appJwtConfigRepository = appJwtConfigRepository;
|
||||
|
|
|
@ -204,7 +204,7 @@ public class JwtStandardCertificateApplicationServiceImpl extends
|
|||
* @param groupId {@link Long} 分组id
|
||||
*/
|
||||
@Override
|
||||
public String create(String name, String icon, String remark, Long groupId) {
|
||||
public String create(String name, String icon, String remark, Long[] groupId) {
|
||||
//1、创建应用
|
||||
AppEntity appEntity = createApp(name, icon, remark, groupId, InitLoginType.PORTAL_OR_APP,
|
||||
AuthorizationType.AUTHORIZATION);
|
||||
|
@ -229,9 +229,10 @@ public class JwtStandardCertificateApplicationServiceImpl extends
|
|||
AppCertRepository appCertRepository,
|
||||
AppRepository appRepository,
|
||||
AppAccountRepository appAccountRepository,
|
||||
AppGroupAssociationRepository appGroupAssociationRepository,
|
||||
AppAccessPolicyRepository appAccessPolicyRepository) {
|
||||
super(appJwtConfigRepository, appCertRepository, appRepository, appAccountRepository,
|
||||
appAccessPolicyRepository);
|
||||
appGroupAssociationRepository, appAccessPolicyRepository);
|
||||
this.appJwtConfigConverter = appJwtConfigConverter;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -137,8 +137,10 @@ public abstract class AbstractOidcCertificateApplicationService extends
|
|||
AppAccountRepository appAccountRepository,
|
||||
AppAccessPolicyRepository appAccessPolicyRepository,
|
||||
AppRepository appRepository,
|
||||
AppGroupAssociationRepository appGroupAssociationRepository,
|
||||
AppOidcConfigRepository appOidcConfigRepository) {
|
||||
super(appCertRepository, appAccountRepository, appAccessPolicyRepository, appRepository);
|
||||
super(appCertRepository, appAccountRepository, appAccessPolicyRepository,
|
||||
appGroupAssociationRepository, appRepository);
|
||||
this.appCertRepository = appCertRepository;
|
||||
this.appRepository = appRepository;
|
||||
this.appOidcConfigRepository = appOidcConfigRepository;
|
||||
|
|
|
@ -78,7 +78,7 @@ public class OidcStandardCertificateApplicationServiceImpl extends
|
|||
* @param groupId {@link Long} 分组id
|
||||
*/
|
||||
@Override
|
||||
public String create(String name, String icon, String remark, Long groupId) {
|
||||
public String create(String name, String icon, String remark, Long[] groupId) {
|
||||
//1、创建应用
|
||||
AppEntity appEntity = createApp(name, icon, remark, groupId, InitLoginType.APP,
|
||||
AuthorizationType.AUTHORIZATION);
|
||||
|
@ -275,9 +275,10 @@ public class OidcStandardCertificateApplicationServiceImpl extends
|
|||
AppAccessPolicyRepository appAccessPolicyRepository,
|
||||
AppRepository appRepository,
|
||||
AppOidcConfigRepository appOidcConfigRepository,
|
||||
AppGroupAssociationRepository appGroupAssociationRepository,
|
||||
AppOidcStandardConfigConverter appOidcStandardConfigConverter) {
|
||||
super(appCertRepository, appAccountRepository, appAccessPolicyRepository, appRepository,
|
||||
appOidcConfigRepository);
|
||||
appGroupAssociationRepository, appOidcConfigRepository);
|
||||
this.appOidcStandardConfigConverter = appOidcStandardConfigConverter;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -182,13 +182,6 @@ public class AppEventType {
|
|||
public static Type DELETE_APP_GROUP = new Type("eiam:event:app_group:delete",
|
||||
"删除应用分组", APP_GROUP_RESOURCE, List.of(UserType.ADMIN));
|
||||
|
||||
/**
|
||||
* 添加应用分组关联
|
||||
*/
|
||||
public static Type ADD_APP_GROUP_ASSOCIATION = new Type(
|
||||
"eiam:event:add_app_group_association", "添加应用分组关联", APP_GROUP_RESOURCE,
|
||||
List.of(UserType.ADMIN));
|
||||
|
||||
/**
|
||||
* 移除应用分组关联
|
||||
*/
|
||||
|
|
|
@ -504,10 +504,6 @@ public enum EventType {
|
|||
* 删除应用分组
|
||||
*/
|
||||
DELETE_APP_GROUP(AppEventType.DELETE_APP_GROUP),
|
||||
/**
|
||||
* 添加应用组关联
|
||||
*/
|
||||
ADD_APP_GROUP_ASSOCIATION(AppEventType.ADD_APP_GROUP_ASSOCIATION),
|
||||
/**
|
||||
* 移除应用组关联
|
||||
*/
|
||||
|
|
|
@ -176,25 +176,6 @@ public class AppGroupController {
|
|||
return ApiRestResult.<Boolean> builder().result(result).build();
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加分组用户
|
||||
*
|
||||
* @param appIds {@link String}
|
||||
* @return {@link Boolean}
|
||||
*/
|
||||
@Lock
|
||||
@Preview
|
||||
@Validated
|
||||
@Operation(summary = "添加应用组关联")
|
||||
@Audit(type = EventType.ADD_APP_GROUP_ASSOCIATION)
|
||||
@PostMapping(value = "/add_association/{id}")
|
||||
@PreAuthorize(value = "authenticated and @sae.hasAuthority(T(cn.topiam.employee.support.security.userdetails.UserType).ADMIN)")
|
||||
public ApiRestResult<Boolean> addAssociation(@PathVariable(value = "id") String id,
|
||||
@Parameter(description = "应用ID") String[] appIds) {
|
||||
return ApiRestResult.<Boolean> builder().result(appGroupService.addAssociation(id, appIds))
|
||||
.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* 移除分组用户
|
||||
*
|
||||
|
|
|
@ -73,7 +73,7 @@ public interface AppGroupConverter {
|
|||
* @param appGroupPo {@link AppGroupPO}
|
||||
* @return {@link AppGroupListResult}
|
||||
*/
|
||||
AppGroupListResult entityConvertToAppGroupListResult(AppGroupPO appGroupPo);
|
||||
AppGroupListResult entityConvertToAppGroupListResult(AppGroupPO appGroupPo);
|
||||
|
||||
/**
|
||||
* 实体转分组返回
|
||||
|
@ -81,7 +81,7 @@ public interface AppGroupConverter {
|
|||
* @param entity {@link AppGroupEntity}
|
||||
* @return {@link AppGroupGetResult}
|
||||
*/
|
||||
AppGroupGetResult entityConvertToAppGroupResult(AppGroupEntity entity);
|
||||
AppGroupGetResult entityConvertToAppGroupResult(AppGroupEntity entity);
|
||||
|
||||
/**
|
||||
* 将分组修改对象转换为entity
|
||||
|
|
|
@ -51,12 +51,6 @@ public class AppGroupGetResult implements Serializable {
|
|||
@Parameter(description = "分组编码")
|
||||
private String code;
|
||||
|
||||
/**
|
||||
* 是否启用
|
||||
*/
|
||||
@Parameter(description = "分组是否启用")
|
||||
private Boolean enabled;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
|
|
|
@ -39,25 +39,19 @@ public class AppGroupListResult implements Serializable {
|
|||
* ID
|
||||
*/
|
||||
@Parameter(description = "ID")
|
||||
private String id;
|
||||
private String id;
|
||||
|
||||
/**
|
||||
* 分组名称
|
||||
*/
|
||||
@Parameter(description = "分组名称")
|
||||
private String name;
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 分组编码
|
||||
*/
|
||||
@Parameter(description = "分组编码")
|
||||
private String code;
|
||||
|
||||
/**
|
||||
* 是否启用
|
||||
*/
|
||||
@Parameter(description = "是否启用")
|
||||
private Boolean enabled;
|
||||
private String code;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
|
@ -69,6 +63,6 @@ public class AppGroupListResult implements Serializable {
|
|||
* 备注
|
||||
*/
|
||||
@Parameter(description = "备注")
|
||||
private String remark;
|
||||
private String remark;
|
||||
|
||||
}
|
||||
|
|
|
@ -64,6 +64,6 @@ public class AppCreateParam implements Serializable {
|
|||
/**
|
||||
* 应用分组id
|
||||
*/
|
||||
@Schema(description = "应用分组id")
|
||||
private Long groupId;
|
||||
@Schema(description = "应用分组ID")
|
||||
private Long[] groupId;
|
||||
}
|
||||
|
|
|
@ -21,6 +21,7 @@ import java.io.Serializable;
|
|||
|
||||
import lombok.Data;
|
||||
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
|
||||
|
@ -53,5 +54,4 @@ public class AppGroupCreateParam implements Serializable {
|
|||
*/
|
||||
@Schema(description = "备注")
|
||||
private String remark;
|
||||
|
||||
}
|
||||
|
|
|
@ -39,23 +39,23 @@ public class AppGroupUpdateParam implements Serializable {
|
|||
*/
|
||||
@Schema(description = "分组id")
|
||||
@NotNull(message = "ID不能为空")
|
||||
private Long id;
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 分组名称
|
||||
*/
|
||||
@Schema(description = "分组名称")
|
||||
private String name;
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 分组排序
|
||||
*/
|
||||
@Schema(description = "分组编码")
|
||||
private String code;
|
||||
private String code;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
@Schema(description = "备注")
|
||||
private String remark;
|
||||
private String remark;
|
||||
}
|
||||
|
|
|
@ -78,8 +78,8 @@ public class AppGroupServiceImpl implements AppGroupService {
|
|||
@Override
|
||||
public Page<AppGroupListResult> getAppGroupList(PageModel pageModel, AppGroupQuery query) {
|
||||
//查询映射
|
||||
org.springframework.data.domain.Page<AppGroupPO> list = appGroupRepository
|
||||
.getAppGroupList(query, PageRequest.of(pageModel.getCurrent(), pageModel.getPageSize()));
|
||||
org.springframework.data.domain.Page<AppGroupPO> list = appGroupRepository.getAppGroupList(
|
||||
query, PageRequest.of(pageModel.getCurrent(), pageModel.getPageSize()));
|
||||
return appGroupConverter.entityConvertToAppGroupListResult(list);
|
||||
}
|
||||
|
||||
|
@ -92,7 +92,6 @@ public class AppGroupServiceImpl implements AppGroupService {
|
|||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean createAppGroup(AppGroupCreateParam param) {
|
||||
// TODO 创建后没有数据权限
|
||||
AppGroupEntity entity = appGroupConverter.appGroupCreateParamConvertToEntity(param);
|
||||
appGroupRepository.save(entity);
|
||||
AuditContext.setTarget(
|
||||
|
@ -230,7 +229,7 @@ public class AppGroupServiceImpl implements AppGroupService {
|
|||
* 批量移除应用
|
||||
*
|
||||
* @param appIds {@link String}
|
||||
* @param id {@link String}
|
||||
* @param id {@link String}
|
||||
* @return {@link Boolean}
|
||||
*/
|
||||
@Override
|
||||
|
|
Loading…
Reference in New Issue