mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-10-31 18:28:43 +08:00 
			
		
		
		
	完善 role、user、menu 删除时,对权限的影响
This commit is contained in:
		| @@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration; | ||||
| import org.redisson.spring.starter.RedissonAutoConfiguration; | ||||
| import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; | ||||
| import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; | ||||
| import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration; | ||||
| import org.springframework.boot.test.context.SpringBootTest; | ||||
| import org.springframework.context.annotation.Import; | ||||
| import org.springframework.test.context.ActiveProfiles; | ||||
| @@ -30,6 +31,7 @@ public class BaseDbAndRedisUnitTest { | ||||
|             // DB 配置类 | ||||
|             DataSourceConfiguration.class, // 自己的 DB 配置类 | ||||
|             DataSourceAutoConfiguration.class, // Spring DB 自动配置类 | ||||
|             DataSourceTransactionManagerAutoConfiguration.class, // Spring 事务自动配置类 | ||||
|             DruidDataSourceAutoConfigure.class, // Druid 自动配置类 | ||||
|             // MyBatis 配置类 | ||||
|             MybatisConfiguration.class, // 自己的 MyBatis 配置类 | ||||
|   | ||||
| @@ -5,6 +5,7 @@ import cn.iocoder.dashboard.framework.mybatis.config.MybatisConfiguration; | ||||
| import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; | ||||
| import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration; | ||||
| import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; | ||||
| import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration; | ||||
| import org.springframework.boot.test.context.SpringBootTest; | ||||
| import org.springframework.context.annotation.Import; | ||||
| import org.springframework.test.context.ActiveProfiles; | ||||
| @@ -26,6 +27,7 @@ public class BaseDbUnitTest { | ||||
|             // DB 配置类 | ||||
|             DataSourceConfiguration.class, // 自己的 DB 配置类 | ||||
|             DataSourceAutoConfiguration.class, // Spring DB 自动配置类 | ||||
|             DataSourceTransactionManagerAutoConfiguration.class, // Spring 事务自动配置类 | ||||
|             DruidDataSourceAutoConfigure.class, // Druid 自动配置类 | ||||
|             // MyBatis 配置类 | ||||
|             MybatisConfiguration.class, // 自己的 MyBatis 配置类 | ||||
|   | ||||
| @@ -0,0 +1,109 @@ | ||||
| package cn.iocoder.dashboard.modules.system.service.permission; | ||||
|  | ||||
| import cn.iocoder.dashboard.BaseDbUnitTest; | ||||
| import cn.iocoder.dashboard.modules.system.dal.dataobject.permission.SysRoleMenuDO; | ||||
| import cn.iocoder.dashboard.modules.system.dal.dataobject.permission.SysUserRoleDO; | ||||
| import cn.iocoder.dashboard.modules.system.dal.mysql.permission.SysRoleMenuMapper; | ||||
| import cn.iocoder.dashboard.modules.system.dal.mysql.permission.SysUserRoleMapper; | ||||
| import cn.iocoder.dashboard.modules.system.mq.producer.permission.SysPermissionProducer; | ||||
| import cn.iocoder.dashboard.modules.system.service.permission.impl.SysPermissionServiceImpl; | ||||
| import org.junit.jupiter.api.Test; | ||||
| import org.springframework.boot.test.mock.mockito.MockBean; | ||||
| import org.springframework.context.annotation.Import; | ||||
|  | ||||
| import javax.annotation.Resource; | ||||
| import java.util.List; | ||||
|  | ||||
| import static cn.iocoder.dashboard.util.AssertUtils.assertPojoEquals; | ||||
| import static cn.iocoder.dashboard.util.RandomUtils.randomLongId; | ||||
| import static cn.iocoder.dashboard.util.RandomUtils.randomPojo; | ||||
| import static org.junit.jupiter.api.Assertions.assertEquals; | ||||
| import static org.mockito.Mockito.verify; | ||||
|  | ||||
| @Import(SysPermissionServiceImpl.class) | ||||
| public class SysPermissionServiceTest extends BaseDbUnitTest { | ||||
|  | ||||
|     @Resource | ||||
|     private SysPermissionServiceImpl permissionService; | ||||
|  | ||||
|     @Resource | ||||
|     private SysRoleMenuMapper roleMenuMapper; | ||||
|     @Resource | ||||
|     private SysUserRoleMapper userRoleMapper; | ||||
|  | ||||
|     @MockBean | ||||
|     private SysRoleService roleService; | ||||
|     @MockBean | ||||
|     private SysMenuService menuService; | ||||
|  | ||||
|     @MockBean | ||||
|     private SysPermissionProducer permissionProducer; | ||||
|  | ||||
|     @Test | ||||
|     public void testProcessRoleDeleted() { | ||||
|         // 准备参数 | ||||
|         Long roleId = randomLongId(); | ||||
|         // mock 数据 UserRole | ||||
|         SysUserRoleDO userRoleDO01 = randomPojo(SysUserRoleDO.class, o -> o.setRoleId(roleId)); // 被删除 | ||||
|         userRoleMapper.insert(userRoleDO01); | ||||
|         SysUserRoleDO userRoleDO02 = randomPojo(SysUserRoleDO.class); // 不被删除 | ||||
|         userRoleMapper.insert(userRoleDO02); | ||||
|         // mock 数据 RoleMenu | ||||
|         SysRoleMenuDO roleMenuDO01 = randomPojo(SysRoleMenuDO.class, o -> o.setRoleId(roleId)); // 被删除 | ||||
|         roleMenuMapper.insert(roleMenuDO01); | ||||
|         SysRoleMenuDO roleMenuDO02 = randomPojo(SysRoleMenuDO.class); // 不被删除 | ||||
|         roleMenuMapper.insert(roleMenuDO02); | ||||
|  | ||||
|         // 调用 | ||||
|         permissionService.processRoleDeleted(roleId); | ||||
|         // 断言数据 RoleMenuDO | ||||
|         List<SysRoleMenuDO> dbRoleMenus = roleMenuMapper.selectList(); | ||||
|         assertEquals(1, dbRoleMenus.size()); | ||||
|         assertPojoEquals(dbRoleMenus.get(0), roleMenuDO02); | ||||
|         // 断言数据 UserRoleDO | ||||
|         List<SysUserRoleDO> dbUserRoles = userRoleMapper.selectList(); | ||||
|         assertEquals(1, dbUserRoles.size()); | ||||
|         assertPojoEquals(dbUserRoles.get(0), userRoleDO02); | ||||
|         // 断言调用 | ||||
|         verify(permissionProducer).sendRoleMenuRefreshMessage(); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testProcessMenuDeleted() { | ||||
|         // 准备参数 | ||||
|         Long menuId = randomLongId(); | ||||
|         // mock 数据 | ||||
|         SysRoleMenuDO roleMenuDO01 = randomPojo(SysRoleMenuDO.class, o -> o.setMenuId(menuId)); // 被删除 | ||||
|         roleMenuMapper.insert(roleMenuDO01); | ||||
|         SysRoleMenuDO roleMenuDO02 = randomPojo(SysRoleMenuDO.class); // 不被删除 | ||||
|         roleMenuMapper.insert(roleMenuDO02); | ||||
|  | ||||
|         // 调用 | ||||
|         permissionService.processMenuDeleted(menuId); | ||||
|         // 断言数据 | ||||
|         List<SysRoleMenuDO> dbRoleMenus = roleMenuMapper.selectList(); | ||||
|         assertEquals(1, dbRoleMenus.size()); | ||||
|         assertPojoEquals(dbRoleMenus.get(0), roleMenuDO02); | ||||
|         // 断言调用 | ||||
|         verify(permissionProducer).sendRoleMenuRefreshMessage(); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testProcessUserDeleted() { | ||||
|         // 准备参数 | ||||
|         Long userId = randomLongId(); | ||||
|         // mock 数据 | ||||
|         SysUserRoleDO userRoleDO01 = randomPojo(SysUserRoleDO.class, o -> o.setUserId(userId)); // 被删除 | ||||
|         userRoleMapper.insert(userRoleDO01); | ||||
|         SysUserRoleDO userRoleDO02 = randomPojo(SysUserRoleDO.class); // 不被删除 | ||||
|         userRoleMapper.insert(userRoleDO02); | ||||
|  | ||||
|         // 调用 | ||||
|         permissionService.processUserDeleted(userId); | ||||
|         // 断言数据 | ||||
|         List<SysUserRoleDO> dbUserRoles = userRoleMapper.selectList(); | ||||
|         assertEquals(1, dbUserRoles.size()); | ||||
|         assertPojoEquals(dbUserRoles.get(0), userRoleDO02); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -8,6 +8,7 @@ DELETE FROM "sys_dict_data"; | ||||
| DELETE FROM "sys_role"; | ||||
| DELETE FROM "sys_role_menu"; | ||||
| DELETE FROM "sys_menu"; | ||||
| DELETE FROM "sys_user_role"; | ||||
| DELETE FROM "sys_dict_type"; | ||||
| DELETE FROM "sys_user_session"; | ||||
| DELETE FROM "sys_post"; | ||||
|   | ||||
| @@ -113,6 +113,18 @@ CREATE TABLE IF NOT EXISTS "sys_menu" ( | ||||
|     PRIMARY KEY ("id") | ||||
| ) COMMENT '菜单权限表'; | ||||
|  | ||||
| CREATE TABLE IF NOT EXISTS "sys_user_role" ( | ||||
|      "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, | ||||
|      "user_id" bigint NOT NULL, | ||||
|      "role_id" bigint NOT NULL, | ||||
|      "creator" varchar(64) DEFAULT '', | ||||
|      "create_time" timestamp DEFAULT NULL, | ||||
|      "updater" varchar(64) DEFAULT '', | ||||
|      "update_time" timestamp DEFAULT NULL, | ||||
|      "deleted" bit DEFAULT FALSE, | ||||
|      PRIMARY KEY ("id") | ||||
| ) COMMENT '用户和角色关联表'; | ||||
|  | ||||
| CREATE TABLE IF NOT EXISTS "sys_dict_type" ( | ||||
|     "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, | ||||
|     "name" varchar(100) NOT NULL DEFAULT '', | ||||
| @@ -297,4 +309,4 @@ create table "inf_api_error_log" ( | ||||
|  "update_time" timestamp not null default current_timestamp, | ||||
|  "deleted" bit not null default false, | ||||
|  primary key ("id") | ||||
| ) comment '系统异常日志'; | ||||
| ) comment '系统异常日志'; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 YunaiV
					YunaiV