mirror of
https://codeup.aliyun.com/64f7d6b8ce01efaafef1e678/coal/coal.git
synced 2026-01-25 07:46:40 +08:00
添加系统默认角色支持
This commit is contained in:
@@ -5,7 +5,6 @@ import cn.lihongjie.coal.common.Ctx;
|
||||
import cn.lihongjie.coal.exception.BizException;
|
||||
import cn.lihongjie.coal.resource.entity.ResourceEntity;
|
||||
import cn.lihongjie.coal.resource.service.ResourceService;
|
||||
import cn.lihongjie.coal.role.entity.RoleEntity;
|
||||
import cn.lihongjie.coal.role.service.RoleService;
|
||||
import cn.lihongjie.coal.session.SessionService;
|
||||
import cn.lihongjie.coal.spring.config.SystemConfig;
|
||||
@@ -21,7 +20,6 @@ import jakarta.servlet.http.HttpServletResponse;
|
||||
import lombok.SneakyThrows;
|
||||
|
||||
import org.apache.commons.lang3.BooleanUtils;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.http.entity.ContentType;
|
||||
import org.slf4j.MDC;
|
||||
@@ -40,10 +38,8 @@ import org.springframework.web.filter.OncePerRequestFilter;
|
||||
import org.springframework.web.util.pattern.PathPatternParser;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
@Component
|
||||
@Order(0)
|
||||
@@ -147,11 +143,7 @@ public class AuthFilter extends OncePerRequestFilter {
|
||||
MDC.put("user", user.getUsername());
|
||||
|
||||
Optional<ResourceEntity> userResource =
|
||||
Stream.concat(
|
||||
ObjectUtils.defaultIfNull(
|
||||
user.getRoles(), new ArrayList<RoleEntity>())
|
||||
.stream(),
|
||||
roleService.getDefaultRoles().stream())
|
||||
user.allRoles().stream()
|
||||
.flatMap(x -> x.getPermissions().stream())
|
||||
.flatMap(x -> x.getResources().stream())
|
||||
.filter(x -> StringUtils.equals(x.getId(), resource.get().getId()))
|
||||
|
||||
@@ -9,7 +9,7 @@ import cn.lihongjie.coal.organization.dto.UpdateOrganizationDto;
|
||||
import cn.lihongjie.coal.organization.entity.OrganizationEntity;
|
||||
import cn.lihongjie.coal.organization.mapper.OrganizationMapper;
|
||||
import cn.lihongjie.coal.organization.repository.OrganizationRepository;
|
||||
import cn.lihongjie.coal.user.dto.CreateUserDto;
|
||||
import cn.lihongjie.coal.user.dto.CreateOrgAdminDto;
|
||||
import cn.lihongjie.coal.user.service.UserService;
|
||||
|
||||
import jakarta.annotation.PostConstruct;
|
||||
@@ -43,11 +43,11 @@ public class OrganizationService extends BaseService<OrganizationEntity, Organiz
|
||||
|
||||
this.repository.save(entity);
|
||||
|
||||
CreateUserDto dto = new CreateUserDto();
|
||||
CreateOrgAdminDto dto = new CreateOrgAdminDto();
|
||||
dto.setOrganizationId(entity.getId());
|
||||
dto.setUsername(request.getOrgAdminUserName());
|
||||
dto.setPassword(request.getOrgAdminPassword());
|
||||
userService.create(dto);
|
||||
userService.createOrgAdmin(dto);
|
||||
|
||||
return getById(entity.getId());
|
||||
}
|
||||
|
||||
@@ -23,6 +23,9 @@ public class RoleEntity extends OrgCommonEntity {
|
||||
@Comment("是否为系统默认角色")
|
||||
private Boolean isSysDefault = false;
|
||||
|
||||
@Comment("是否为机构管理员默认角色")
|
||||
private Boolean isOrgAdmin = false;
|
||||
|
||||
@ManyToMany(mappedBy = "roles")
|
||||
@Cache(usage = org.hibernate.annotations.CacheConcurrencyStrategy.READ_WRITE)
|
||||
private List<UserEntity> users;
|
||||
|
||||
@@ -11,4 +11,6 @@ import java.util.List;
|
||||
public interface RoleRepository extends BaseRepository<RoleEntity> {
|
||||
|
||||
List<RoleEntity> findAllByIsSysDefault(Boolean isSysDefault);
|
||||
|
||||
List<RoleEntity> findAllByIsOrgAdmin(Boolean isOrgAdmin);
|
||||
}
|
||||
|
||||
@@ -77,8 +77,13 @@ public class RoleService extends BaseService<RoleEntity, RoleRepository> {
|
||||
return page.map(this.mapper::toDto);
|
||||
}
|
||||
|
||||
public List<RoleEntity> getDefaultRoles() {
|
||||
public List<RoleEntity> getSysDefaultRoles() {
|
||||
|
||||
return repository.findAllByIsSysDefault(true);
|
||||
}
|
||||
|
||||
public List<RoleEntity> getOrgAdminRoles() {
|
||||
|
||||
return repository.findAllByIsOrgAdmin(true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
package cn.lihongjie.coal.user.dto;
|
||||
|
||||
import cn.lihongjie.coal.base.dto.OrgCommonDto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import org.hibernate.annotations.Comment;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class CreateOrgAdminDto extends OrgCommonDto {
|
||||
|
||||
@Comment("用户名")
|
||||
private String username;
|
||||
|
||||
@Comment("密码")
|
||||
private String password;
|
||||
|
||||
@Comment("邮箱")
|
||||
private String email;
|
||||
|
||||
@Comment("手机号")
|
||||
private String phone;
|
||||
|
||||
private List<String> roles;
|
||||
}
|
||||
@@ -22,6 +22,7 @@ public class UserDto extends OrgCommonDto {
|
||||
@Comment("会话ID")
|
||||
private String sessionId;
|
||||
private List<RoleDto> roles;
|
||||
private List<RoleDto> otherRoles;
|
||||
|
||||
@Data
|
||||
public static class RoleDto extends OrgCommonDto {}
|
||||
|
||||
@@ -3,16 +3,14 @@ package cn.lihongjie.coal.user.entity;
|
||||
import cn.lihongjie.coal.base.entity.OrgCommonEntity;
|
||||
import cn.lihongjie.coal.role.entity.RoleEntity;
|
||||
|
||||
import jakarta.persistence.Cacheable;
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.JoinTable;
|
||||
import jakarta.persistence.ManyToMany;
|
||||
import jakarta.persistence.*;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import org.hibernate.annotations.Cache;
|
||||
import org.hibernate.annotations.Comment;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@@ -45,9 +43,20 @@ public class UserEntity extends OrgCommonEntity {
|
||||
@Cache(usage = org.hibernate.annotations.CacheConcurrencyStrategy.READ_WRITE)
|
||||
private List<RoleEntity> roles;
|
||||
|
||||
@Transient private List<RoleEntity> otherRoles;
|
||||
|
||||
@Comment("机构管理员标识")
|
||||
private Boolean orgAdmin;
|
||||
|
||||
@Comment("系统管理员标识")
|
||||
private Boolean sysAdmin;
|
||||
|
||||
public List<RoleEntity> allRoles() {
|
||||
|
||||
List<RoleEntity> allRoles = new ArrayList<>(this.roles);
|
||||
if (this.otherRoles != null) {
|
||||
allRoles.addAll(this.otherRoles);
|
||||
}
|
||||
return allRoles;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package cn.lihongjie.coal.user.mapper;
|
||||
|
||||
import cn.lihongjie.coal.base.mapper.BaseMapper;
|
||||
import cn.lihongjie.coal.base.mapper.CommonMapper;
|
||||
import cn.lihongjie.coal.user.dto.CreateOrgAdminDto;
|
||||
import cn.lihongjie.coal.user.dto.CreateUserDto;
|
||||
import cn.lihongjie.coal.user.dto.UpdateUserDto;
|
||||
import cn.lihongjie.coal.user.dto.UserDto;
|
||||
@@ -15,4 +16,6 @@ import org.mapstruct.control.DeepClone;
|
||||
componentModel = MappingConstants.ComponentModel.SPRING,
|
||||
uses = {CommonMapper.class},
|
||||
mappingControl = DeepClone.class)
|
||||
public interface UserMapper extends BaseMapper<UserEntity, UserDto, CreateUserDto, UpdateUserDto> {}
|
||||
public interface UserMapper extends BaseMapper<UserEntity, UserDto, CreateUserDto, UpdateUserDto> {
|
||||
UserEntity toEntity(CreateOrgAdminDto request);
|
||||
}
|
||||
|
||||
@@ -9,11 +9,9 @@ import cn.lihongjie.coal.organization.entity.OrganizationEntity;
|
||||
import cn.lihongjie.coal.resource.dto.ResourceDto;
|
||||
import cn.lihongjie.coal.resource.mapper.ResourceMapper;
|
||||
import cn.lihongjie.coal.resource.service.ResourceService;
|
||||
import cn.lihongjie.coal.role.entity.RoleEntity;
|
||||
import cn.lihongjie.coal.role.service.RoleService;
|
||||
import cn.lihongjie.coal.user.dto.ChangeUserPwdDto;
|
||||
import cn.lihongjie.coal.user.dto.CreateUserDto;
|
||||
import cn.lihongjie.coal.user.dto.UpdateUserDto;
|
||||
import cn.lihongjie.coal.user.dto.UserDto;
|
||||
import cn.lihongjie.coal.user.dto.*;
|
||||
import cn.lihongjie.coal.user.entity.UserEntity;
|
||||
import cn.lihongjie.coal.user.mapper.UserMapper;
|
||||
import cn.lihongjie.coal.user.repository.UserRepository;
|
||||
@@ -27,6 +25,7 @@ import jakarta.persistence.criteria.Root;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.BooleanUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.core.convert.ConversionService;
|
||||
@@ -84,6 +83,30 @@ public class UserService extends BaseService<UserEntity, UserRepository> {
|
||||
}
|
||||
}
|
||||
|
||||
public UserDto createOrgAdmin(CreateOrgAdminDto request) {
|
||||
|
||||
StopWatch stopWatch = new StopWatch();
|
||||
|
||||
try {
|
||||
stopWatch.start("encode");
|
||||
request.setPassword(passwordEncoder.encode(request.getPassword()));
|
||||
stopWatch.stop();
|
||||
UserEntity entity = mapper.toEntity(request);
|
||||
entity.setOrgAdmin(true);
|
||||
entity.setSysAdmin(false);
|
||||
|
||||
stopWatch.start("save");
|
||||
this.repository.save(entity);
|
||||
stopWatch.stop();
|
||||
|
||||
stopWatch.start("getById");
|
||||
return getById(entity.getId());
|
||||
} finally {
|
||||
stopWatch.stop();
|
||||
log.info(stopWatch.prettyPrint());
|
||||
}
|
||||
}
|
||||
|
||||
public UserDto update(UpdateUserDto request) {
|
||||
UserEntity user = this.repository.get(request.getId());
|
||||
this.mapper.updateEntity(user, request);
|
||||
@@ -100,6 +123,14 @@ public class UserService extends BaseService<UserEntity, UserRepository> {
|
||||
|
||||
UserEntity user = repository.get(id);
|
||||
|
||||
List<RoleEntity> defaultRoles = roleService.getSysDefaultRoles();
|
||||
user.setOtherRoles(defaultRoles);
|
||||
if (BooleanUtils.isTrue(user.getOrgAdmin())) {
|
||||
List<RoleEntity> orgAdminRoles = roleService.getOrgAdminRoles();
|
||||
|
||||
user.getOtherRoles().addAll(orgAdminRoles);
|
||||
}
|
||||
|
||||
UserDto dto = mapper.toDto(user);
|
||||
if (Ctx.isLoggedIn()) {
|
||||
dto.setSessionId(Ctx.getSessionId());
|
||||
@@ -199,7 +230,7 @@ public class UserService extends BaseService<UserEntity, UserRepository> {
|
||||
if (CollectionUtils.isEmpty(user.getRoles())) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
return io.vavr.collection.Stream.ofAll(user.getRoles())
|
||||
return io.vavr.collection.Stream.ofAll(user.allRoles())
|
||||
.flatMap(
|
||||
x ->
|
||||
x.getPermissions() == null
|
||||
|
||||
Reference in New Issue
Block a user