| | |
| | | |
| | | // ========== 角色-菜单的相关方法 ========== |
| | | |
| | | @Override |
| | | @DSTransactional // 多数据源,使用 @DSTransactional 保证本地事务,以及数据源的切换 |
| | | @CacheEvict(value = RedisKeyConstants.MENU_ROLE_ID_LIST, |
| | | allEntries = true) // allEntries 清空所有缓存,主要一次更新涉及到的 menuIds 较多,反倒批量会更快 |
| | | public void assignRoleAppMenu(Long roleId, Set<Long> menuIds) { |
| | | // 获得角色拥有应用菜单编号 |
| | | MenuListReqVO reqVO = new MenuListReqVO(); |
| | | List<MenuDO> appMenuList = menuService.getAppMenuList(reqVO); |
| | | Set<Long> appMenuIds = convertSet(appMenuList, MenuDO::getId); |
| | | Set<Long> dbMenuIds = convertSet(roleMenuMapper.selectListByRoleId(roleId), RoleMenuDO::getMenuId); |
| | | dbMenuIds.retainAll(appMenuIds); |
| | | // 计算新增和删除的菜单编号 |
| | | Set<Long> menuIdList = CollUtil.emptyIfNull(menuIds); |
| | | Collection<Long> createMenuIds = CollUtil.subtract(menuIdList, dbMenuIds); |
| | | Collection<Long> deleteMenuIds = CollUtil.subtract(dbMenuIds, menuIdList); |
| | | // 执行新增和删除。对于已经授权的菜单,不用做任何处理 |
| | | if (CollUtil.isNotEmpty(createMenuIds)) { |
| | | roleMenuMapper.insertBatch(CollectionUtils.convertList(createMenuIds, menuId -> { |
| | | RoleMenuDO entity = new RoleMenuDO(); |
| | | entity.setRoleId(roleId); |
| | | entity.setMenuId(menuId); |
| | | return entity; |
| | | })); |
| | | } |
| | | if (CollUtil.isNotEmpty(deleteMenuIds)) { |
| | | roleMenuMapper.deleteListByRoleIdAndMenuIds(roleId, deleteMenuIds); |
| | | } |
| | | } |
| | | // @Override |
| | | // @DSTransactional // 多数据源,使用 @DSTransactional 保证本地事务,以及数据源的切换 |
| | | // @CacheEvict(value = RedisKeyConstants.MENU_ROLE_ID_LIST, |
| | | // allEntries = true) // allEntries 清空所有缓存,主要一次更新涉及到的 menuIds 较多,反倒批量会更快 |
| | | // public void assignRoleAppMenu(Long roleId, Set<Long> menuIds) { |
| | | // // 获得角色拥有应用菜单编号 |
| | | // MenuListReqVO reqVO = new MenuListReqVO(); |
| | | // List<MenuDO> appMenuList = menuService.getAppMenuList(reqVO); |
| | | // Set<Long> appMenuIds = convertSet(appMenuList, MenuDO::getId); |
| | | // Set<Long> dbMenuIds = convertSet(roleMenuMapper.selectListByRoleId(roleId), RoleMenuDO::getMenuId); |
| | | // dbMenuIds.retainAll(appMenuIds); |
| | | // // 计算新增和删除的菜单编号 |
| | | // Set<Long> menuIdList = CollUtil.emptyIfNull(menuIds); |
| | | // Collection<Long> createMenuIds = CollUtil.subtract(menuIdList, dbMenuIds); |
| | | // Collection<Long> deleteMenuIds = CollUtil.subtract(dbMenuIds, menuIdList); |
| | | // // 执行新增和删除。对于已经授权的菜单,不用做任何处理 |
| | | // if (CollUtil.isNotEmpty(createMenuIds)) { |
| | | // roleMenuMapper.insertBatch(CollectionUtils.convertList(createMenuIds, menuId -> { |
| | | // RoleMenuDO entity = new RoleMenuDO(); |
| | | // entity.setRoleId(roleId); |
| | | // entity.setMenuId(menuId); |
| | | // return entity; |
| | | // })); |
| | | // } |
| | | // if (CollUtil.isNotEmpty(deleteMenuIds)) { |
| | | // roleMenuMapper.deleteListByRoleIdAndMenuIds(roleId, deleteMenuIds); |
| | | // } |
| | | // } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | |
| | | if (CollUtil.isEmpty(roleIds)) { |
| | | return Collections.emptySet(); |
| | | } |
| | | // 如果是管理员的情况下,获取全部菜单编号 |
| | | if (roleService.hasAnySuperAdmin(roleIds)) { |
| | | return convertSet(menuService.getMenuList(), MenuDO::getId); |
| | | } |
| | | return convertSet(roleMenuMapper.selectListByRoleId(roleIds), RoleMenuDO::getMenuId); |
| | | } |
| | | |
| | |
| | | if (CollUtil.isEmpty(roleIds)) { |
| | | return Collections.emptySet(); |
| | | } |
| | | |
| | | // 获取 tenantId |
| | | Long tenantId = getTenantId(); |
| | | // 如果是管理员的情况下,获取全部应用菜单编号 |
| | | if (roleService.hasAnySuperAdmin(roleIds)) { |
| | | MenuListReqVO reqVO = new MenuListReqVO(); |
| | | return convertSet(menuService.getAppMenuList(reqVO), MenuDO::getId); |
| | | return convertSet(menuService.getAppMenuList(tenantId, reqVO), MenuDO::getId); |
| | | } |
| | | // 如果是非管理员的情况下,获得拥有的应用菜单编号 |
| | | // 获取 tenantId |
| | | Long tenantId = getTenantId(); |
| | | TenantDO tenant = tenantService.getTenant(tenantId); |
| | | TenantPackageDO tenantPackage = tenantPackageService.getTenantPackage(tenant.getPackageId()); |
| | | Set<Long> menuIds = tenantPackage.getMenuIds(); |