From cdb509a4fa10bf32fd1341e04dee7c9c9c7f8c20 Mon Sep 17 00:00:00 2001 From: jenn <244251889@qq.com> Date: 星期五, 10 三月 2023 21:15:54 +0800 Subject: [PATCH] fix 修复用户相关更新操作会越权的问题 --- ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTenantServiceImpl.java | 59 ++++++++++++++++++++++++++++++++++++++++++----------------- 1 files changed, 42 insertions(+), 17 deletions(-) diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTenantServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTenantServiceImpl.java index ea2bc54..8721111 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTenantServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTenantServiceImpl.java @@ -290,49 +290,74 @@ * 鏍¢獙浼佷笟鍚嶇О鏄惁鍞竴 */ @Override - public String checkCompanyNameUnique(SysTenantBo bo) { + public boolean checkCompanyNameUnique(SysTenantBo bo) { boolean exist = baseMapper.exists(new LambdaQueryWrapper<SysTenant>() .eq(SysTenant::getCompanyName, bo.getCompanyName()) .ne(ObjectUtil.isNotNull(bo.getTenantId()), SysTenant::getTenantId, bo.getTenantId())); - if (exist) { - return TenantConstants.NOT_PASS; - } - return TenantConstants.PASS; + return !exist; } /** * 鏍¢獙璐﹀彿浣欓 */ @Override - public String checkAccountBalance(String tenantId) { + public boolean checkAccountBalance(String tenantId) { SysTenantVo tenant = SpringUtils.getAopProxy(this).queryByTenantId(tenantId); // 濡傛灉浣欓涓�-1浠h〃涓嶉檺鍒� if (tenant.getAccountCount() == -1) { - return TenantConstants.PASS; + return true; } Long userNumber = sysUserMapper.selectCount(new LambdaQueryWrapper<>()); // 濡傛灉浣欓澶т簬0浠h〃杩樻湁鍙敤鍚嶉 - if (tenant.getAccountCount() - userNumber > 0) { - return TenantConstants.PASS; - } - return TenantConstants.NOT_PASS; + return tenant.getAccountCount() - userNumber > 0; } /** * 鏍¢獙鏈夋晥鏈� */ @Override - public String checkExpireTime(String tenantId) { + public boolean checkExpireTime(String tenantId) { SysTenantVo tenant = SpringUtils.getAopProxy(this).queryByTenantId(tenantId); // 濡傛灉鏈缃繃鏈熸椂闂翠唬琛ㄤ笉闄愬埗 if (ObjectUtil.isNull(tenant.getExpireTime())) { - return TenantConstants.PASS; + return true; } // 濡傛灉褰撳墠鏃堕棿鍦ㄨ繃鏈熸椂闂翠箣鍓嶅垯閫氳繃 - if (new Date().before(tenant.getExpireTime())) { - return TenantConstants.PASS; - } - return TenantConstants.NOT_PASS; + return new Date().before(tenant.getExpireTime()); } + /** + * 鍚屾绉熸埛濂楅 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean syncTenantPackage(String tenantId, String packageId) { + TenantHelper.enableIgnore(); + SysTenantPackage tenantPackage = sysTenantPackageMapper.selectById(packageId); + List<SysRole> roles = sysRoleMapper.selectList( + new LambdaQueryWrapper<SysRole>().eq(SysRole::getTenantId, tenantId)); + List<Long> roleIds = new ArrayList<>(roles.size() - 1); + List<Long> menuIds = StringUtils.splitTo(tenantPackage.getMenuIds(), Convert::toLong); + roles.forEach(item -> { + if (TenantConstants.TENANT_ADMIN_ROLE_KEY.equals(item.getRoleKey())) { + List<SysRoleMenu> roleMenus = new ArrayList<>(menuIds.size()); + menuIds.forEach(menuId -> { + SysRoleMenu roleMenu = new SysRoleMenu(); + roleMenu.setRoleId(item.getRoleId()); + roleMenu.setMenuId(menuId); + roleMenus.add(roleMenu); + }); + sysRoleMenuMapper.delete(new LambdaQueryWrapper<SysRoleMenu>().eq(SysRoleMenu::getRoleId, item.getRoleId())); + sysRoleMenuMapper.insertBatch(roleMenus); + } else { + roleIds.add(item.getRoleId()); + } + }); + if (!roleIds.isEmpty()) { + sysRoleMenuMapper.delete( + new LambdaQueryWrapper<SysRoleMenu>().in(SysRoleMenu::getRoleId, roleIds).notIn(!menuIds.isEmpty(), SysRoleMenu::getMenuId, menuIds)); + } + TenantHelper.disableIgnore(); + return true; + } } -- Gitblit v1.9.3