"@Override\npublic Boolean permissionCheck(String url) {\n\n\t\tif (!checkEnable){\n\t\t\treturn true;\n\t\t}\n\n\t\tString userId = Optional.ofNullable(SecurityContextHolder.getContext().getAuthentication())\n\t\t\t\t.map(Authentication::getName).orElse(null);\n\t\t/\n\t\t * 默认与web权限保持一致, 若有其他配置 则拥有额外的API权限\n\t\t */\n\n\t\t//获取页面web权限\n\t\tList webPermission = permissionMapper\n\t\t\t\t.getPermissionOfUserByType(userId, PermissionType.WEB_FUNC.getValue());\n\n\t\t//通过页面Web权限中document字段获取到关联的API权限\n\t\tSet webDocumentSet = webPermission.stream().map(Permission::getDocument).collect(Collectors.toSet());\n\t\tQueryWrapper permissionQueryWrapper = new QueryWrapper<>();\n\t\tpermissionQueryWrapper.in(Permission.COL_CORRELATION_WEB, webDocumentSet)\n\t\t\t\t.eq(Permission.COL_TYPE, PermissionType.API.getValue());\n\t\tSet webApiPermissions = new HashSet<>(permissionMapper.selectList(permissionQueryWrapper));\n\n\t\t//查询是否有其他配置权限, 并将集合相加\n\t\tList authApiPermissions = permissionMapper\n\t\t\t\t.getPermissionOfUserByType(userId, PermissionType.API.getValue());\n\t\twebApiPermissions.addAll(authApiPermissions);\n\n\t\t/\n\t\t * 根据请求地址中第一个元素, 筛选出指定模块的权限\n\t\t * 例子: 请求地址为 /glaucus/device_alarm/current/v2/list\n\t\t * apiPerUrl中只保留 mysql中 document开头为 glaucus的权限\n\t\t */\n\t\tString[] reqUrlArr = ArrayUtils.remove(url.split("/"), 0);\n\t\tSet apiPerUrl = webApiPermissions.stream().filter(permission ->\n\t\t\t\tStringUtils.equals(reqUrlArr[0], permission.getDocument().substring(0, permission.getDocument().indexOf("/"))))\n\t\t\t\t.map(Permission::getDocument).collect(Collectors.toSet());\n\t\treturn isPassed(reqUrlArr, apiPerUrl);\n\t}\n\n\t这个方法怎么写单元测试,用的h2数据库内容:\n\t要编写这个方法的单元测试,可以使用H2数据库来模拟数据库操作。首先,需要在测试类上添加@RunWith(SpringRunner.class)@SpringBootTest注解,以启用Spring Boot上下文和依赖注入。\n\n\t然后,可以使用@Autowired注解注入permissionMapperpermissionService,并使用@MockBean注解模拟SecurityContextHolderAuthentication对象。\n\n\t接下来,可以编写测试方法来测试permissionCheck方法。在测试方法中,可以使用Mockito.when方法模拟权限相关的方法调用,并返回需要的结果。然后,调用permissionCheck方法并断言返回的结果是否与预期相符。\n\n\t以下是一个可能的测试示例:\n\n\tjava\n\t@RunWith(SpringRunner.class)\n\t@SpringBootTest\n\tpublic class PermissionServiceTest {\n\n\t\t@Autowired\n\t\tprivate PermissionMapper permissionMapper;\n\n\t\t@Autowired\n\t\tprivate PermissionService permissionService;\n\n\t\t@MockBean\n\t\tprivate SecurityContextHolder securityContextHolder;\n\n\t\t@MockBean\n\t\tprivate Authentication authentication;\n\n\t\t@Test\n\t\tpublic void testPermissionCheck() {\n\t\t\t// 模拟权限相关的方法调用并返回需要的结果\n\t\t\tMockito.when(permissionMapper.getPermissionOfUserByType(Mockito.anyString(), Mockito.eq(PermissionType.WEB_FUNC.getValue())))\n\t\t\t\t\t.thenReturn(Arrays.asList(new Permission("permission1"), new Permission("permission2")));\n\n\t\t\tMockito.when(permissionMapper.selectList(Mockito.any(QueryWrapper.class)))\n\t\t\t\t\t.thenReturn(Arrays.asList(new Permission("permission3"), new Permission("permission4")));\n\n\t\t\tMockito.when(permissionMapper.getPermissionOfUserByType(Mockito.anyString(), Mockito.eq(PermissionType.API.getValue())))\n\t\t\t\t\t.thenReturn(Arrays.asList(new Permission("permission5"), new Permission("permission6")));\n\n\t\t\t// 模拟请求地址\n\t\t\tString url = "/glaucus/device_alarm/current/v2/list";\n\n\t\t\t// 调用方法并断言返回的结果\n\t\t\tboolean result = permissionService.permissionCheck(url);\n\t\t\tassertTrue(result);\n\t\t}\n\t}\n\t\n\n\t在这个示例中,我们使用Mockito.when方法模拟了permissionMapper的方法调用,并返回了一些权限对象。然后,我们调用permissionCheck方法并断言返回的结果为true。请根据实际情况调整模拟的方法调用和断言的条件。


原文地址: https://www.cveoy.top/t/topic/pCQf 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录