提交
This commit is contained in:
@@ -6,6 +6,7 @@ import cn.dev33.satoken.stp.StpUtil;
|
||||
import cn.dev33.satoken.util.SaResult;
|
||||
import com.tashow.cloud.model.SystemRole;
|
||||
import com.tashow.cloud.service.SystemRoleService;
|
||||
import jakarta.annotation.security.PermitAll;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import java.util.List;
|
||||
@@ -159,10 +160,10 @@ public class RoleController {
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取启用状态的角色列表(可用于下拉选择)
|
||||
* 获取启用状态的角色列表
|
||||
*/
|
||||
@GetMapping("/options")
|
||||
@SaIgnore
|
||||
@PermitAll
|
||||
public SaResult getRoleOptions() {
|
||||
try {
|
||||
List<SystemRole> roles = roleService.getRolesByStatus(0); // 0表示正常状态
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
package com.tashow.cloud.tashowmoduleuserbiz.security.config;
|
||||
|
||||
import cn.dev33.satoken.interceptor.SaInterceptor;
|
||||
import cn.dev33.satoken.router.SaRouter;
|
||||
import cn.dev33.satoken.sso.SaSsoProcessor;
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
|
||||
@@ -11,34 +9,15 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||
/**
|
||||
* Sa-Token 配置类
|
||||
*/
|
||||
@Configuration
|
||||
//@Configuration
|
||||
public class SaTokenConfigure implements WebMvcConfigurer {
|
||||
|
||||
/**
|
||||
/* *//**
|
||||
* 注册Sa-Token拦截器,打开注解式鉴权功能
|
||||
*/
|
||||
*//*
|
||||
@Override
|
||||
public void addInterceptors(InterceptorRegistry registry) {
|
||||
// 注册路由拦截器,自定义认证规则
|
||||
registry.addInterceptor(new SaInterceptor(handler -> {
|
||||
// 登录认证 -- 排除登录接口外,其他接口需要登录才能访问
|
||||
SaRouter.match("/**")
|
||||
.notMatch("/user/doLogin")
|
||||
.notMatch("/sso/*")
|
||||
.notMatch("/oauth2/*")
|
||||
.check(r -> StpUtil.checkLogin());
|
||||
})).addPathPatterns("/**");
|
||||
}
|
||||
|
||||
/**
|
||||
* SSO-Client端:处理所有SSO相关请求
|
||||
* 配置此函数后,可在客户端端通过以下方式完成单点登录功能:
|
||||
* http://{host}:{port}/sso/login —— Client端登录地址,接受参数:back=登录后的跳转地址
|
||||
* http://{host}:{port}/sso/logout —— Client端单点注销地址(isSlo=true时打开),接受参数:back=注销后的跳转地址
|
||||
* http://{host}:{port}/sso/logoutCall —— Client端单点注销回调地址(isSlo=true时打开),此接口为框架回调,开发者无需关心
|
||||
*/
|
||||
public void ssoClientDister() {
|
||||
// 处理SSO相关请求
|
||||
SaSsoProcessor.instance.clientDister();
|
||||
}
|
||||
}
|
||||
// 注册 Sa-Token 拦截器,打开注解式鉴权功能
|
||||
registry.addInterceptor(new SaInterceptor()).addPathPatterns("/**");
|
||||
}*/
|
||||
}
|
||||
@@ -25,7 +25,7 @@ public class SecurityConfiguration {
|
||||
.requestMatchers("/webjars/**").permitAll()
|
||||
.requestMatchers("/swagger-ui").permitAll()
|
||||
.requestMatchers("/swagger-ui/**").permitAll()
|
||||
;
|
||||
.requestMatchers("/test").permitAll() ;
|
||||
// Druid 监控
|
||||
registry.requestMatchers("/druid/**").permitAll();
|
||||
// Spring Boot Actuator 的安全配置
|
||||
|
||||
@@ -1,63 +0,0 @@
|
||||
package com.tashow.cloud.user.convert;
|
||||
|
||||
import com.tashow.cloud.user.model.Role;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 角色对象转换器
|
||||
*/
|
||||
@Mapper
|
||||
public interface RoleConvert {
|
||||
|
||||
RoleConvert INSTANCE = Mappers.getMapper(RoleConvert.class);
|
||||
|
||||
/**
|
||||
* 将角色列表转换为角色ID列表
|
||||
*
|
||||
* @param roles 角色列表
|
||||
* @return 角色ID列表
|
||||
*/
|
||||
default List<Long> convertToRoleIds(List<Role> roles) {
|
||||
if (roles == null || roles.isEmpty()) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return roles.stream()
|
||||
.map(Role::getId)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 将角色列表转换为角色名称列表
|
||||
*
|
||||
* @param roles 角色列表
|
||||
* @return 角色名称列表
|
||||
*/
|
||||
default List<String> convertToRoleNames(List<Role> roles) {
|
||||
if (roles == null || roles.isEmpty()) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return roles.stream()
|
||||
.map(Role::getName)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 将角色列表转换为角色编码列表
|
||||
*
|
||||
* @param roles 角色列表
|
||||
* @return 角色编码列表
|
||||
*/
|
||||
default List<String> convertToRoleCodes(List<Role> roles) {
|
||||
if (roles == null || roles.isEmpty()) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return roles.stream()
|
||||
.map(Role::getCode)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
@@ -1,136 +0,0 @@
|
||||
package com.tashow.cloud.user.convert;
|
||||
|
||||
import com.tashow.cloud.user.dto.UserCreateReqDTO;
|
||||
import com.tashow.cloud.user.dto.UserRegisterReqDTO;
|
||||
import com.tashow.cloud.user.dto.UserRespDTO;
|
||||
import com.tashow.cloud.user.dto.UserUpdateReqDTO;
|
||||
import com.tashow.cloud.user.model.User;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.Mapping;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 用户对象转换器
|
||||
*/
|
||||
@Mapper
|
||||
public interface UserConvert {
|
||||
|
||||
UserConvert INSTANCE = Mappers.getMapper(UserConvert.class);
|
||||
|
||||
/**
|
||||
* 用户创建请求DTO转实体
|
||||
*/
|
||||
@Mapping(target = "roles", ignore = true)
|
||||
@Mapping(target = "createTime", ignore = true)
|
||||
@Mapping(target = "updateTime", ignore = true)
|
||||
@Mapping(target = "loginDate", ignore = true)
|
||||
@Mapping(target = "deleted", ignore = true)
|
||||
@Mapping(target = "loginIp", ignore = true)
|
||||
@Mapping(target = "postIds", expression = "java(postIdsToString(bean.getPostIds()))")
|
||||
User convert(UserCreateReqDTO bean);
|
||||
|
||||
/**
|
||||
* 用户更新请求DTO转实体
|
||||
*/
|
||||
@Mapping(target = "roles", ignore = true)
|
||||
@Mapping(target = "username", ignore = true)
|
||||
@Mapping(target = "password", ignore = true)
|
||||
@Mapping(target = "createTime", ignore = true)
|
||||
@Mapping(target = "updateTime", ignore = true)
|
||||
@Mapping(target = "loginDate", ignore = true)
|
||||
@Mapping(target = "deleted", ignore = true)
|
||||
@Mapping(target = "loginIp", ignore = true)
|
||||
@Mapping(target = "postIds", expression = "java(postIdsToString(bean.getPostIds()))")
|
||||
User convert(UserUpdateReqDTO bean);
|
||||
|
||||
/**
|
||||
* 用户注册请求DTO转实体
|
||||
*/
|
||||
@Mapping(target = "roles", ignore = true)
|
||||
@Mapping(target = "id", ignore = true)
|
||||
@Mapping(target = "createTime", ignore = true)
|
||||
@Mapping(target = "updateTime", ignore = true)
|
||||
@Mapping(target = "loginDate", ignore = true)
|
||||
@Mapping(target = "deleted", ignore = true)
|
||||
@Mapping(target = "deptId", ignore = true)
|
||||
@Mapping(target = "postIds", ignore = true)
|
||||
@Mapping(target = "sex", ignore = true)
|
||||
@Mapping(target = "creator", ignore = true)
|
||||
@Mapping(target = "updater", ignore = true)
|
||||
@Mapping(target = "tenantId", ignore = true)
|
||||
@Mapping(target = "remark", ignore = true)
|
||||
@Mapping(target = "status", constant = "0")
|
||||
User convert(UserRegisterReqDTO bean);
|
||||
|
||||
/**
|
||||
* 用户实体转响应DTO
|
||||
*/
|
||||
@Mapping(target = "sexName", expression = "java(getSexName(bean.getSex()))")
|
||||
@Mapping(target = "statusName", expression = "java(getStatusName(bean.getStatus()))")
|
||||
@Mapping(target = "roleIds", ignore = true)
|
||||
@Mapping(target = "roleNames", ignore = true)
|
||||
@Mapping(target = "roleCodes", ignore = true)
|
||||
@Mapping(target = "postIds", expression = "java(stringToPostIds(bean.getPostIds()))")
|
||||
@Mapping(target = "postNames", ignore = true)
|
||||
@Mapping(target = "deptName", ignore = true)
|
||||
UserRespDTO convert(User bean);
|
||||
|
||||
/**
|
||||
* 用户实体列表转响应DTO列表
|
||||
*/
|
||||
List<UserRespDTO> convertList(List<User> list);
|
||||
|
||||
/**
|
||||
* 岗位ID列表转字符串
|
||||
*/
|
||||
default String postIdsToString(List<Long> postIds) {
|
||||
if (postIds == null || postIds.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
return postIds.stream()
|
||||
.map(String::valueOf)
|
||||
.collect(Collectors.joining(","));
|
||||
}
|
||||
|
||||
/**
|
||||
* 字符串转岗位ID列表
|
||||
*/
|
||||
default List<Long> stringToPostIds(String postIds) {
|
||||
if (postIds == null || postIds.isEmpty()) {
|
||||
return java.util.Collections.emptyList();
|
||||
}
|
||||
return java.util.Arrays.stream(postIds.split(","))
|
||||
.map(Long::valueOf)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取性别名称
|
||||
*/
|
||||
default String getSexName(Integer sex) {
|
||||
if (sex == null) {
|
||||
return null;
|
||||
}
|
||||
return switch (sex) {
|
||||
case 1 -> "男";
|
||||
case 2 -> "女";
|
||||
default -> "未知";
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取状态名称
|
||||
*/
|
||||
default String getStatusName(Integer status) {
|
||||
if (status == null) {
|
||||
return null;
|
||||
}
|
||||
return switch (status) {
|
||||
case 0 -> "正常";
|
||||
case 1 -> "停用";
|
||||
default -> "未知";
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
/**
|
||||
* 用户中心模块业务层实现
|
||||
*
|
||||
* <p>此模块包含以下主要组件:
|
||||
* <ul>
|
||||
* <li>controller - 控制器层,负责接收和响应HTTP请求</li>
|
||||
* <li>service - 服务实现层,实现业务逻辑</li>
|
||||
* <li>mapper - 数据访问层,与数据库交互</li>
|
||||
* <li>convert - 对象转换层,负责DTO和实体间的转换</li>
|
||||
* <li>config - 配置类</li>
|
||||
* </ul>
|
||||
*/
|
||||
package com.tashow.cloud.user;
|
||||
@@ -1,33 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.tashow.cloud.tashowmoduleuserbiz.mapper.SystemRoleMenuMapper">
|
||||
|
||||
<!-- 根据角色ID列表获取菜单ID列表 -->
|
||||
<select id="selectMenuIdsByRoleIds" resultType="java.lang.Long">
|
||||
SELECT DISTINCT menu_id
|
||||
FROM system_role_menu
|
||||
WHERE role_id IN
|
||||
<foreach collection="roleIds" item="roleId" open="(" separator="," close=")">
|
||||
#{roleId}
|
||||
</foreach>
|
||||
AND deleted = 0
|
||||
</select>
|
||||
|
||||
<!-- 根据角色ID删除角色菜单关联 -->
|
||||
<update id="deleteByRoleId">
|
||||
UPDATE system_role_menu
|
||||
SET deleted = 1,
|
||||
update_time = NOW()
|
||||
WHERE role_id = #{roleId}
|
||||
AND deleted = 0
|
||||
</update>
|
||||
|
||||
<insert id="batchInsert">
|
||||
INSERT INTO system_role_menu (role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id)
|
||||
VALUES
|
||||
<foreach collection="menuIds" item="menuId" separator=",">
|
||||
(#{roleId}, #{menuId}, #{creator}, NOW(), #{creator}, NOW(), 0, 0)
|
||||
</foreach>
|
||||
</insert>
|
||||
|
||||
</mapper>
|
||||
@@ -1,23 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.tashow.cloud.tashowmoduleuserbiz.mapper.SystemUserPostMapper">
|
||||
|
||||
<!-- 根据用户ID删除用户岗位关联 -->
|
||||
<update id="deleteByUserId">
|
||||
UPDATE system_user_post
|
||||
SET deleted = 1,
|
||||
update_time = NOW()
|
||||
WHERE user_id = #{userId}
|
||||
AND deleted = 0
|
||||
</update>
|
||||
|
||||
<!-- 批量插入用户岗位关联 -->
|
||||
<insert id="batchInsert">
|
||||
INSERT INTO system_user_post (user_id, post_id, creator, create_time, updater, update_time, deleted, tenant_id)
|
||||
VALUES
|
||||
<foreach collection="postIds" item="postId" separator=",">
|
||||
(#{userId}, #{postId}, #{creator}, NOW(), #{creator}, NOW(), 0, 0)
|
||||
</foreach>
|
||||
</insert>
|
||||
|
||||
</mapper>
|
||||
@@ -1,23 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.tashow.cloud.tashowmoduleuserbiz.mapper.SystemUserRoleMapper">
|
||||
|
||||
<!-- 根据用户ID删除用户角色关联 -->
|
||||
<update id="deleteByUserId">
|
||||
UPDATE system_user_role
|
||||
SET deleted = 1,
|
||||
update_time = NOW()
|
||||
WHERE user_id = #{userId}
|
||||
AND deleted = 0
|
||||
</update>
|
||||
|
||||
<!-- 批量插入用户角色关联 -->
|
||||
<insert id="batchInsert">
|
||||
INSERT INTO system_user_role (user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id)
|
||||
VALUES
|
||||
<foreach collection="roleIds" item="roleId" separator=",">
|
||||
(#{userId}, #{roleId}, #{creator}, NOW(), #{creator}, NOW(), 0, 0)
|
||||
</foreach>
|
||||
</insert>
|
||||
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user