mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-01 02:38:43 +08:00 
			
		
		
		
	去除 LoginUser 的 roleIds、deptId 字段,简化
This commit is contained in:
		| @@ -1,6 +1,5 @@ | ||||
| package cn.iocoder.yudao.module.system.service.auth; | ||||
|  | ||||
| import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | ||||
| import cn.iocoder.yudao.framework.security.core.LoginUser; | ||||
| import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; | ||||
| import cn.iocoder.yudao.framework.test.core.util.AssertUtils; | ||||
| @@ -12,7 +11,6 @@ import cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum; | ||||
| import cn.iocoder.yudao.module.system.service.common.CaptchaService; | ||||
| import cn.iocoder.yudao.module.system.service.dept.PostService; | ||||
| import cn.iocoder.yudao.module.system.service.logger.LoginLogService; | ||||
| import cn.iocoder.yudao.module.system.service.permission.PermissionService; | ||||
| import cn.iocoder.yudao.module.system.service.social.SocialUserService; | ||||
| import cn.iocoder.yudao.module.system.service.user.AdminUserService; | ||||
| import org.junit.jupiter.api.BeforeEach; | ||||
| @@ -34,7 +32,6 @@ import java.util.Set; | ||||
| import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; | ||||
| import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; | ||||
| import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; | ||||
| import static java.util.Collections.singleton; | ||||
| import static org.junit.jupiter.api.Assertions.assertEquals; | ||||
| import static org.junit.jupiter.api.Assertions.assertThrows; | ||||
| import static org.mockito.ArgumentMatchers.eq; | ||||
| @@ -49,8 +46,6 @@ public class AuthServiceImplTest extends BaseDbUnitTest { | ||||
|     @MockBean | ||||
|     private AdminUserService userService; | ||||
|     @MockBean | ||||
|     private PermissionService permissionService; | ||||
|     @MockBean | ||||
|     private AuthenticationManager authenticationManager; | ||||
|     @MockBean | ||||
|     private Authentication authentication; | ||||
| @@ -108,16 +103,11 @@ public class AuthServiceImplTest extends BaseDbUnitTest { | ||||
|         // mock 方法 01 | ||||
|         AdminUserDO user = randomPojo(AdminUserDO.class, o -> o.setId(userId)); | ||||
|         when(userService.getUser(eq(userId))).thenReturn(user); | ||||
|         // mock 方法 02 | ||||
|         Set<Long> roleIds = randomSet(Long.class); | ||||
|         when(permissionService.getUserRoleIds(eq(userId), eq(singleton(CommonStatusEnum.ENABLE.getStatus())))) | ||||
|                 .thenReturn(roleIds); | ||||
|  | ||||
|         // 调用 | ||||
|         LoginUser loginUser = authService.mockLogin(userId); | ||||
|         // 断言 | ||||
|         AssertUtils.assertPojoEquals(user, loginUser, "updateTime"); | ||||
|         assertEquals(roleIds, loginUser.getRoleIds()); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
| @@ -247,15 +237,10 @@ public class AuthServiceImplTest extends BaseDbUnitTest { | ||||
|         // mock authentication | ||||
|         Long userId = randomLongId(); | ||||
|         Set<Long> userRoleIds = randomSet(Long.class); | ||||
|         LoginUser loginUser = randomPojo(LoginUser.class, o -> { | ||||
|             o.setId(userId); | ||||
|             o.setRoleIds(userRoleIds); | ||||
|         }); | ||||
|         LoginUser loginUser = randomPojo(LoginUser.class, o -> o.setId(userId)); | ||||
|         when(authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(reqVO.getUsername(), reqVO.getPassword()))) | ||||
|                 .thenReturn(authentication); | ||||
|         when(authentication.getPrincipal()).thenReturn(loginUser); | ||||
|         // mock 获得 User 拥有的角色编号数组 | ||||
|         when(permissionService.getUserRoleIds(userId, singleton(CommonStatusEnum.ENABLE.getStatus()))).thenReturn(userRoleIds); | ||||
|         // mock 缓存登录用户到 Redis | ||||
|         String token = randomString(); | ||||
|         when(userSessionService.createUserSession(loginUser, userIp, userAgent)).thenReturn(token); | ||||
|   | ||||
| @@ -1,20 +1,22 @@ | ||||
| package cn.iocoder.yudao.module.system.service.permission; | ||||
|  | ||||
| import cn.hutool.core.collection.CollUtil; | ||||
| import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | ||||
| import cn.iocoder.yudao.framework.datapermission.core.dept.service.dto.DeptDataPermissionRespDTO; | ||||
| import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; | ||||
| import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; | ||||
| import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; | ||||
| import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleMenuDO; | ||||
| import cn.iocoder.yudao.module.system.dal.dataobject.permission.UserRoleDO; | ||||
| import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; | ||||
| import cn.iocoder.yudao.module.system.dal.mysql.permission.RoleMenuBatchInsertMapper; | ||||
| import cn.iocoder.yudao.module.system.dal.mysql.permission.RoleMenuMapper; | ||||
| import cn.iocoder.yudao.module.system.dal.mysql.permission.UserRoleBatchInsertMapper; | ||||
| import cn.iocoder.yudao.module.system.dal.mysql.permission.UserRoleMapper; | ||||
| import cn.iocoder.yudao.module.system.enums.permission.DataScopeEnum; | ||||
| import cn.iocoder.yudao.module.system.mq.producer.permission.PermissionProducer; | ||||
| import cn.iocoder.yudao.module.system.service.dept.DeptService; | ||||
| import cn.iocoder.yudao.framework.datapermission.core.dept.service.dto.DeptDataPermissionRespDTO; | ||||
| import cn.iocoder.yudao.framework.security.core.LoginUser; | ||||
| import cn.iocoder.yudao.module.system.enums.permission.DataScopeEnum; | ||||
| import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; | ||||
| import cn.iocoder.yudao.module.system.service.user.AdminUserService; | ||||
| import org.junit.jupiter.api.Test; | ||||
| import org.springframework.boot.test.mock.mockito.MockBean; | ||||
| import org.springframework.context.annotation.Import; | ||||
| @@ -25,10 +27,10 @@ import java.util.List; | ||||
| import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; | ||||
| import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; | ||||
| import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; | ||||
| import static java.util.Collections.singleton; | ||||
| import static java.util.Collections.singletonList; | ||||
| import static org.junit.jupiter.api.Assertions.*; | ||||
| import static org.mockito.ArgumentMatchers.eq; | ||||
| import static org.mockito.ArgumentMatchers.same; | ||||
| import static org.mockito.Mockito.verify; | ||||
| import static org.mockito.Mockito.when; | ||||
|  | ||||
| @@ -54,6 +56,9 @@ public class PermissionServiceTest extends BaseDbUnitTest { | ||||
|     private MenuService menuService; | ||||
|     @MockBean | ||||
|     private DeptService deptService; | ||||
|     @MockBean | ||||
|     private AdminUserService userService; | ||||
|  | ||||
|     @MockBean | ||||
|     private PermissionProducer permissionProducer; | ||||
|  | ||||
| @@ -124,112 +129,119 @@ public class PermissionServiceTest extends BaseDbUnitTest { | ||||
|         assertPojoEquals(dbUserRoles.get(0), userRoleDO02); | ||||
|     } | ||||
|  | ||||
|     @Test // 测试从 context 获取的场景 | ||||
|     public void testGetDeptDataPermission_fromContext() { | ||||
|         // 准备参数 | ||||
|         LoginUser loginUser = randomPojo(LoginUser.class); | ||||
|         // mock 方法 | ||||
|         DeptDataPermissionRespDTO respDTO = new DeptDataPermissionRespDTO(); | ||||
|         loginUser.setContext(PermissionServiceImpl.CONTEXT_KEY, respDTO); | ||||
|  | ||||
|         // 调用 | ||||
|         DeptDataPermissionRespDTO result = permissionService.getDeptDataPermission(loginUser); | ||||
|         // 断言 | ||||
|         assertSame(respDTO, result); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testGetDeptDataPermission_All() { | ||||
|         // 准备参数 | ||||
|         LoginUser loginUser = randomPojo(LoginUser.class); | ||||
|         // mock 方法 | ||||
|         RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setDataScope(DataScopeEnum.ALL.getScope())); | ||||
|         when(roleService.getRolesFromCache(same(loginUser.getRoleIds()))).thenReturn(singletonList(roleDO)); | ||||
|         Long userId = 1L; | ||||
|         // mock 用户的角色编号 | ||||
|         userRoleMapper.insert(new UserRoleDO().setUserId(userId).setRoleId(2L)); | ||||
|         // mock 获得用户的角色 | ||||
|         RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setDataScope(DataScopeEnum.ALL.getScope()) | ||||
|                 .setStatus(CommonStatusEnum.ENABLE.getStatus())); | ||||
|         when(roleService.getRolesFromCache(eq(singleton(2L)))).thenReturn(singletonList(roleDO)); | ||||
|         when(roleService.getRoleFromCache(eq(2L))).thenReturn(roleDO); | ||||
|  | ||||
|         // 调用 | ||||
|         DeptDataPermissionRespDTO result = permissionService.getDeptDataPermission(loginUser); | ||||
|         DeptDataPermissionRespDTO result = permissionService.getDeptDataPermission(userId); | ||||
|         // 断言 | ||||
|         assertTrue(result.getAll()); | ||||
|         assertFalse(result.getSelf()); | ||||
|         assertTrue(CollUtil.isEmpty(result.getDeptIds())); | ||||
|         assertSame(result, loginUser.getContext(PermissionServiceImpl.CONTEXT_KEY, DeptDataPermissionRespDTO.class)); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testGetDeptDataPermission_DeptCustom() { | ||||
|         // 准备参数 | ||||
|         LoginUser loginUser = randomPojo(LoginUser.class); | ||||
|         // mock 方法 | ||||
|         RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setDataScope(DataScopeEnum.DEPT_CUSTOM.getScope())); | ||||
|         when(roleService.getRolesFromCache(same(loginUser.getRoleIds()))).thenReturn(singletonList(roleDO)); | ||||
|         Long userId = 1L; | ||||
|         // mock 用户的角色编号 | ||||
|         userRoleMapper.insert(new UserRoleDO().setUserId(userId).setRoleId(2L)); | ||||
|         // mock 获得用户的角色 | ||||
|         RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setDataScope(DataScopeEnum.DEPT_CUSTOM.getScope()) | ||||
|                 .setStatus(CommonStatusEnum.ENABLE.getStatus())); | ||||
|         when(roleService.getRolesFromCache(eq(singleton(2L)))).thenReturn(singletonList(roleDO)); | ||||
|         when(roleService.getRoleFromCache(eq(2L))).thenReturn(roleDO); | ||||
|         // mock 部门的返回 | ||||
|         when(userService.getUser(eq(1L))).thenReturn(new AdminUserDO().setDeptId(3L), null, null); // 最后返回 null 的目的,看看会不会重复调用 | ||||
|  | ||||
|         // 调用 | ||||
|         DeptDataPermissionRespDTO result = permissionService.getDeptDataPermission(loginUser); | ||||
|         DeptDataPermissionRespDTO result = permissionService.getDeptDataPermission(1L); | ||||
|         // 断言 | ||||
|         assertFalse(result.getAll()); | ||||
|         assertFalse(result.getSelf()); | ||||
|         assertEquals(roleDO.getDataScopeDeptIds().size() + 1, result.getDeptIds().size()); | ||||
|         assertTrue(CollUtil.containsAll(result.getDeptIds(), roleDO.getDataScopeDeptIds())); | ||||
|         assertTrue(CollUtil.contains(result.getDeptIds(), loginUser.getDeptId())); | ||||
|         assertSame(result, loginUser.getContext(PermissionServiceImpl.CONTEXT_KEY, DeptDataPermissionRespDTO.class)); | ||||
|         assertTrue(CollUtil.contains(result.getDeptIds(), 3L)); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testGetDeptDataPermission_DeptOnly() { | ||||
|         // 准备参数 | ||||
|         LoginUser loginUser = randomPojo(LoginUser.class); | ||||
|         // mock 方法 | ||||
|         RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setDataScope(DataScopeEnum.DEPT_ONLY.getScope())); | ||||
|         when(roleService.getRolesFromCache(same(loginUser.getRoleIds()))).thenReturn(singletonList(roleDO)); | ||||
|         Long userId = 1L; | ||||
|         // mock 用户的角色编号 | ||||
|         userRoleMapper.insert(new UserRoleDO().setUserId(userId).setRoleId(2L)); | ||||
|         // mock 获得用户的角色 | ||||
|         RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setDataScope(DataScopeEnum.DEPT_ONLY.getScope()) | ||||
|                 .setStatus(CommonStatusEnum.ENABLE.getStatus())); | ||||
|         when(roleService.getRolesFromCache(eq(singleton(2L)))).thenReturn(singletonList(roleDO)); | ||||
|         when(roleService.getRoleFromCache(eq(2L))).thenReturn(roleDO); | ||||
|         // mock 部门的返回 | ||||
|         when(userService.getUser(eq(1L))).thenReturn(new AdminUserDO().setDeptId(3L), null, null); // 最后返回 null 的目的,看看会不会重复调用 | ||||
|  | ||||
|         // 调用 | ||||
|         DeptDataPermissionRespDTO result = permissionService.getDeptDataPermission(loginUser); | ||||
|         DeptDataPermissionRespDTO result = permissionService.getDeptDataPermission(1L); | ||||
|         // 断言 | ||||
|         assertFalse(result.getAll()); | ||||
|         assertFalse(result.getSelf()); | ||||
|         assertEquals(1, result.getDeptIds().size()); | ||||
|         assertTrue(CollUtil.contains(result.getDeptIds(), loginUser.getDeptId())); | ||||
|         assertSame(result, loginUser.getContext(PermissionServiceImpl.CONTEXT_KEY, DeptDataPermissionRespDTO.class)); | ||||
|         assertTrue(CollUtil.contains(result.getDeptIds(), 3L)); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testGetDeptDataPermission_DeptAndChild() { | ||||
|         // 准备参数 | ||||
|         LoginUser loginUser = randomPojo(LoginUser.class); | ||||
|         // mock 方法(角色) | ||||
|         RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setDataScope(DataScopeEnum.DEPT_AND_CHILD.getScope())); | ||||
|         when(roleService.getRolesFromCache(same(loginUser.getRoleIds()))).thenReturn(singletonList(roleDO)); | ||||
|         Long userId = 1L; | ||||
|         // mock 用户的角色编号 | ||||
|         userRoleMapper.insert(new UserRoleDO().setUserId(userId).setRoleId(2L)); | ||||
|         // mock 获得用户的角色 | ||||
|         RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setDataScope(DataScopeEnum.DEPT_AND_CHILD.getScope()) | ||||
|                 .setStatus(CommonStatusEnum.ENABLE.getStatus())); | ||||
|         when(roleService.getRolesFromCache(eq(singleton(2L)))).thenReturn(singletonList(roleDO)); | ||||
|         when(roleService.getRoleFromCache(eq(2L))).thenReturn(roleDO); | ||||
|         // mock 部门的返回 | ||||
|         when(userService.getUser(eq(1L))).thenReturn(new AdminUserDO().setDeptId(3L), null, null); // 最后返回 null 的目的,看看会不会重复调用 | ||||
|         // mock 方法(部门) | ||||
|         DeptDO deptDO = randomPojo(DeptDO.class); | ||||
|         when(deptService.getDeptsByParentIdFromCache(eq(loginUser.getDeptId()), eq(true))) | ||||
|         when(deptService.getDeptsByParentIdFromCache(eq(3L), eq(true))) | ||||
|                 .thenReturn(singletonList(deptDO)); | ||||
|  | ||||
|         // 调用 | ||||
|         DeptDataPermissionRespDTO result = permissionService.getDeptDataPermission(loginUser); | ||||
|         DeptDataPermissionRespDTO result = permissionService.getDeptDataPermission(userId); | ||||
|         // 断言 | ||||
|         assertFalse(result.getAll()); | ||||
|         assertFalse(result.getSelf()); | ||||
|         assertEquals(2, result.getDeptIds().size()); | ||||
|         assertTrue(CollUtil.contains(result.getDeptIds(), deptDO.getId())); | ||||
|         assertTrue(CollUtil.contains(result.getDeptIds(), loginUser.getDeptId())); | ||||
|         assertSame(result, loginUser.getContext(PermissionServiceImpl.CONTEXT_KEY, DeptDataPermissionRespDTO.class)); | ||||
|         assertTrue(CollUtil.contains(result.getDeptIds(), 3L)); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testGetDeptDataPermission_Self() { | ||||
|         // 准备参数 | ||||
|         LoginUser loginUser = randomPojo(LoginUser.class); | ||||
|         // mock 方法 | ||||
|         RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setDataScope(DataScopeEnum.SELF.getScope())); | ||||
|         when(roleService.getRolesFromCache(same(loginUser.getRoleIds()))).thenReturn(singletonList(roleDO)); | ||||
|         Long userId = 1L; | ||||
|         // mock 用户的角色编号 | ||||
|         userRoleMapper.insert(new UserRoleDO().setUserId(userId).setRoleId(2L)); | ||||
|         // mock 获得用户的角色 | ||||
|         RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setDataScope(DataScopeEnum.SELF.getScope()) | ||||
|                 .setStatus(CommonStatusEnum.ENABLE.getStatus())); | ||||
|         when(roleService.getRolesFromCache(eq(singleton(2L)))).thenReturn(singletonList(roleDO)); | ||||
|         when(roleService.getRoleFromCache(eq(2L))).thenReturn(roleDO); | ||||
|  | ||||
|         // 调用 | ||||
|         DeptDataPermissionRespDTO result = permissionService.getDeptDataPermission(loginUser); | ||||
|         DeptDataPermissionRespDTO result = permissionService.getDeptDataPermission(userId); | ||||
|         // 断言 | ||||
|         assertFalse(result.getAll()); | ||||
|         assertTrue(result.getSelf()); | ||||
|         assertTrue(CollUtil.isEmpty(result.getDeptIds())); | ||||
|         assertSame(result, loginUser.getContext(PermissionServiceImpl.CONTEXT_KEY, DeptDataPermissionRespDTO.class)); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 YunaiV
					YunaiV