mirror of
https://codeup.aliyun.com/64f7d6b8ce01efaafef1e678/coal/coal.git
synced 2026-01-25 23:57:12 +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.exception.BizException;
|
||||||
import cn.lihongjie.coal.resource.entity.ResourceEntity;
|
import cn.lihongjie.coal.resource.entity.ResourceEntity;
|
||||||
import cn.lihongjie.coal.resource.service.ResourceService;
|
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.role.service.RoleService;
|
||||||
import cn.lihongjie.coal.session.SessionService;
|
import cn.lihongjie.coal.session.SessionService;
|
||||||
import cn.lihongjie.coal.spring.config.SystemConfig;
|
import cn.lihongjie.coal.spring.config.SystemConfig;
|
||||||
@@ -21,7 +20,6 @@ import jakarta.servlet.http.HttpServletResponse;
|
|||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
|
|
||||||
import org.apache.commons.lang3.BooleanUtils;
|
import org.apache.commons.lang3.BooleanUtils;
|
||||||
import org.apache.commons.lang3.ObjectUtils;
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.http.entity.ContentType;
|
import org.apache.http.entity.ContentType;
|
||||||
import org.slf4j.MDC;
|
import org.slf4j.MDC;
|
||||||
@@ -40,10 +38,8 @@ import org.springframework.web.filter.OncePerRequestFilter;
|
|||||||
import org.springframework.web.util.pattern.PathPatternParser;
|
import org.springframework.web.util.pattern.PathPatternParser;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
import java.util.stream.Stream;
|
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
@Order(0)
|
@Order(0)
|
||||||
@@ -147,11 +143,7 @@ public class AuthFilter extends OncePerRequestFilter {
|
|||||||
MDC.put("user", user.getUsername());
|
MDC.put("user", user.getUsername());
|
||||||
|
|
||||||
Optional<ResourceEntity> userResource =
|
Optional<ResourceEntity> userResource =
|
||||||
Stream.concat(
|
user.allRoles().stream()
|
||||||
ObjectUtils.defaultIfNull(
|
|
||||||
user.getRoles(), new ArrayList<RoleEntity>())
|
|
||||||
.stream(),
|
|
||||||
roleService.getDefaultRoles().stream())
|
|
||||||
.flatMap(x -> x.getPermissions().stream())
|
.flatMap(x -> x.getPermissions().stream())
|
||||||
.flatMap(x -> x.getResources().stream())
|
.flatMap(x -> x.getResources().stream())
|
||||||
.filter(x -> StringUtils.equals(x.getId(), resource.get().getId()))
|
.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.entity.OrganizationEntity;
|
||||||
import cn.lihongjie.coal.organization.mapper.OrganizationMapper;
|
import cn.lihongjie.coal.organization.mapper.OrganizationMapper;
|
||||||
import cn.lihongjie.coal.organization.repository.OrganizationRepository;
|
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 cn.lihongjie.coal.user.service.UserService;
|
||||||
|
|
||||||
import jakarta.annotation.PostConstruct;
|
import jakarta.annotation.PostConstruct;
|
||||||
@@ -43,11 +43,11 @@ public class OrganizationService extends BaseService<OrganizationEntity, Organiz
|
|||||||
|
|
||||||
this.repository.save(entity);
|
this.repository.save(entity);
|
||||||
|
|
||||||
CreateUserDto dto = new CreateUserDto();
|
CreateOrgAdminDto dto = new CreateOrgAdminDto();
|
||||||
dto.setOrganizationId(entity.getId());
|
dto.setOrganizationId(entity.getId());
|
||||||
dto.setUsername(request.getOrgAdminUserName());
|
dto.setUsername(request.getOrgAdminUserName());
|
||||||
dto.setPassword(request.getOrgAdminPassword());
|
dto.setPassword(request.getOrgAdminPassword());
|
||||||
userService.create(dto);
|
userService.createOrgAdmin(dto);
|
||||||
|
|
||||||
return getById(entity.getId());
|
return getById(entity.getId());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,9 @@ public class RoleEntity extends OrgCommonEntity {
|
|||||||
@Comment("是否为系统默认角色")
|
@Comment("是否为系统默认角色")
|
||||||
private Boolean isSysDefault = false;
|
private Boolean isSysDefault = false;
|
||||||
|
|
||||||
|
@Comment("是否为机构管理员默认角色")
|
||||||
|
private Boolean isOrgAdmin = false;
|
||||||
|
|
||||||
@ManyToMany(mappedBy = "roles")
|
@ManyToMany(mappedBy = "roles")
|
||||||
@Cache(usage = org.hibernate.annotations.CacheConcurrencyStrategy.READ_WRITE)
|
@Cache(usage = org.hibernate.annotations.CacheConcurrencyStrategy.READ_WRITE)
|
||||||
private List<UserEntity> users;
|
private List<UserEntity> users;
|
||||||
|
|||||||
@@ -11,4 +11,6 @@ import java.util.List;
|
|||||||
public interface RoleRepository extends BaseRepository<RoleEntity> {
|
public interface RoleRepository extends BaseRepository<RoleEntity> {
|
||||||
|
|
||||||
List<RoleEntity> findAllByIsSysDefault(Boolean isSysDefault);
|
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);
|
return page.map(this.mapper::toDto);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<RoleEntity> getDefaultRoles() {
|
public List<RoleEntity> getSysDefaultRoles() {
|
||||||
|
|
||||||
return repository.findAllByIsSysDefault(true);
|
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")
|
@Comment("会话ID")
|
||||||
private String sessionId;
|
private String sessionId;
|
||||||
private List<RoleDto> roles;
|
private List<RoleDto> roles;
|
||||||
|
private List<RoleDto> otherRoles;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public static class RoleDto extends OrgCommonDto {}
|
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.base.entity.OrgCommonEntity;
|
||||||
import cn.lihongjie.coal.role.entity.RoleEntity;
|
import cn.lihongjie.coal.role.entity.RoleEntity;
|
||||||
|
|
||||||
import jakarta.persistence.Cacheable;
|
import jakarta.persistence.*;
|
||||||
import jakarta.persistence.Entity;
|
|
||||||
import jakarta.persistence.JoinTable;
|
|
||||||
import jakarta.persistence.ManyToMany;
|
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import org.hibernate.annotations.Cache;
|
import org.hibernate.annotations.Cache;
|
||||||
import org.hibernate.annotations.Comment;
|
import org.hibernate.annotations.Comment;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@@ -45,9 +43,20 @@ public class UserEntity extends OrgCommonEntity {
|
|||||||
@Cache(usage = org.hibernate.annotations.CacheConcurrencyStrategy.READ_WRITE)
|
@Cache(usage = org.hibernate.annotations.CacheConcurrencyStrategy.READ_WRITE)
|
||||||
private List<RoleEntity> roles;
|
private List<RoleEntity> roles;
|
||||||
|
|
||||||
|
@Transient private List<RoleEntity> otherRoles;
|
||||||
|
|
||||||
@Comment("机构管理员标识")
|
@Comment("机构管理员标识")
|
||||||
private Boolean orgAdmin;
|
private Boolean orgAdmin;
|
||||||
|
|
||||||
@Comment("系统管理员标识")
|
@Comment("系统管理员标识")
|
||||||
private Boolean sysAdmin;
|
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.BaseMapper;
|
||||||
import cn.lihongjie.coal.base.mapper.CommonMapper;
|
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.CreateUserDto;
|
||||||
import cn.lihongjie.coal.user.dto.UpdateUserDto;
|
import cn.lihongjie.coal.user.dto.UpdateUserDto;
|
||||||
import cn.lihongjie.coal.user.dto.UserDto;
|
import cn.lihongjie.coal.user.dto.UserDto;
|
||||||
@@ -15,4 +16,6 @@ import org.mapstruct.control.DeepClone;
|
|||||||
componentModel = MappingConstants.ComponentModel.SPRING,
|
componentModel = MappingConstants.ComponentModel.SPRING,
|
||||||
uses = {CommonMapper.class},
|
uses = {CommonMapper.class},
|
||||||
mappingControl = DeepClone.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.dto.ResourceDto;
|
||||||
import cn.lihongjie.coal.resource.mapper.ResourceMapper;
|
import cn.lihongjie.coal.resource.mapper.ResourceMapper;
|
||||||
import cn.lihongjie.coal.resource.service.ResourceService;
|
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.role.service.RoleService;
|
||||||
import cn.lihongjie.coal.user.dto.ChangeUserPwdDto;
|
import cn.lihongjie.coal.user.dto.*;
|
||||||
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.entity.UserEntity;
|
import cn.lihongjie.coal.user.entity.UserEntity;
|
||||||
import cn.lihongjie.coal.user.mapper.UserMapper;
|
import cn.lihongjie.coal.user.mapper.UserMapper;
|
||||||
import cn.lihongjie.coal.user.repository.UserRepository;
|
import cn.lihongjie.coal.user.repository.UserRepository;
|
||||||
@@ -27,6 +25,7 @@ import jakarta.persistence.criteria.Root;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
|
import org.apache.commons.lang3.BooleanUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.core.convert.ConversionService;
|
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) {
|
public UserDto update(UpdateUserDto request) {
|
||||||
UserEntity user = this.repository.get(request.getId());
|
UserEntity user = this.repository.get(request.getId());
|
||||||
this.mapper.updateEntity(user, request);
|
this.mapper.updateEntity(user, request);
|
||||||
@@ -100,6 +123,14 @@ public class UserService extends BaseService<UserEntity, UserRepository> {
|
|||||||
|
|
||||||
UserEntity user = repository.get(id);
|
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);
|
UserDto dto = mapper.toDto(user);
|
||||||
if (Ctx.isLoggedIn()) {
|
if (Ctx.isLoggedIn()) {
|
||||||
dto.setSessionId(Ctx.getSessionId());
|
dto.setSessionId(Ctx.getSessionId());
|
||||||
@@ -199,7 +230,7 @@ public class UserService extends BaseService<UserEntity, UserRepository> {
|
|||||||
if (CollectionUtils.isEmpty(user.getRoles())) {
|
if (CollectionUtils.isEmpty(user.getRoles())) {
|
||||||
return new ArrayList<>();
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
return io.vavr.collection.Stream.ofAll(user.getRoles())
|
return io.vavr.collection.Stream.ofAll(user.allRoles())
|
||||||
.flatMap(
|
.flatMap(
|
||||||
x ->
|
x ->
|
||||||
x.getPermissions() == null
|
x.getPermissions() == null
|
||||||
|
|||||||
Reference in New Issue
Block a user