基础数据仓库管理模块数据权限隔离

This commit is contained in:
秦鸿展
2026-02-23 14:18:15 +08:00
parent 766a401d9a
commit b274923993
5 changed files with 66 additions and 41 deletions
@@ -76,29 +76,17 @@ public class LeaseApplicationService {
public List<LeasePO> queryList(LeaseDO leaseDO) { public List<LeasePO> queryList(LeaseDO leaseDO) {
LoginUser loginUser = SecurityUtils.getLoginUser(); LoginUser loginUser = SecurityUtils.getLoginUser();
if (loginUser != null && loginUser.getUserPo() != null){ //前端传organizationId = 2827的时候查询所有组织的数据
Long loginUserOrganizationId = loginUser.getUserPo().getOrganizationId(); Long frontendOrganizationId = leaseDO.getOrganizationId();
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); if (frontendOrganizationId != null && frontendOrganizationId == 2827L) {
// 前端传递2827时,查询所有组织的数据,将organizationId设置为null
// 数据权限:根据organizationId来设置查询权限 leaseDO.setOrganizationId(null);
// organizationId等于2827时查询全部,其他仅查询各自组织的信息 } else {
if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) { // 其他情况,只查询当前登录用户所属组织的数据
// 南光组织(organizationId=2827):可以查询所有组织的数据 if (loginUser != null && loginUser.getUserPo() != null) {
// 如果前端传递了 organizationId,使用前端传递的值进行过滤 Long userOrganizationId = loginUser.getUserPo().getOrganizationId();
// 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 if (userOrganizationId != null) {
if (leaseDO.getOrganizationId() == null) { leaseDO.setOrganizationId(userOrganizationId);
leaseDO.setOrganizationId(null);
leaseDO.setTopOrganizationId(null);
}
} else {
// 其他组织:设置organizationId,只查询当前组织的数据
if (topOrganizationId != null && topOrganizationId != 1){
leaseDO.setTopOrganizationId(topOrganizationId);
}
// 如果前端传递了organizationId,验证是否与当前登录用户的组织ID一致
if (leaseDO.getOrganizationId() != null && !leaseDO.getOrganizationId().equals(loginUserOrganizationId)) {
// 前端传递了其他组织的organizationId,强制使用当前登录用户的组织ID,防止越权查询
leaseDO.setOrganizationId(loginUserOrganizationId);
} }
} }
} }
@@ -45,9 +45,19 @@ public class StorageLocationApplicationService {
public List<StorageLocationPO> queryList(StorageLocationDO storageLocationDO) { public List<StorageLocationPO> queryList(StorageLocationDO storageLocationDO) {
LoginUser loginUser = SecurityUtils.getLoginUser(); LoginUser loginUser = SecurityUtils.getLoginUser();
if (loginUser != null){ if (loginUser != null){
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); //前端传organizationId = 2827的时候查询所有组织的数据
if (topOrganizationId != null && topOrganizationId != 1){ Long frontendOrganizationId = storageLocationDO.getOrganizationId();
storageLocationDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); if (frontendOrganizationId != null && frontendOrganizationId == 2827L) {
// 前端传递2827时,查询所有组织的数据,将organizationId设置为null
storageLocationDO.setOrganizationId(null);
} else {
// 其他情况,只查询当前登录用户所属组织的数据
if (loginUser != null && loginUser.getUserPo() != null) {
Long userOrganizationId = loginUser.getUserPo().getOrganizationId();
if (userOrganizationId != null) {
storageLocationDO.setOrganizationId(userOrganizationId);
}
}
} }
// 只有当前端没有明确传仓库条件时,才使用用户关联仓库缓存进行过滤; // 只有当前端没有明确传仓库条件时,才使用用户关联仓库缓存进行过滤;
// 避免出现“单据仓库=常温仓,但库位列表仍显示保税仓”的错配问题。 // 避免出现“单据仓库=常温仓,但库位列表仍显示保税仓”的错配问题。
@@ -28,14 +28,25 @@ public class StorageLocationGroupApplicationService {
public List<StorageLocationGroupPO> queryList(StorageLocationGroupDO storageLocationGroupDO) { public List<StorageLocationGroupPO> queryList(StorageLocationGroupDO storageLocationGroupDO) {
LoginUser loginUser = SecurityUtils.getLoginUser(); LoginUser loginUser = SecurityUtils.getLoginUser();
if (loginUser != null){ //前端传organizationId = 2827的时候查询所有组织的数据
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); Long frontendOrganizationId = storageLocationGroupDO.getOrganizationId();
if (topOrganizationId != null && topOrganizationId != 1){ if (frontendOrganizationId != null && frontendOrganizationId == 2827L) {
storageLocationGroupDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); // 前端传递2827时,查询所有组织的数据,将organizationId设置为null
storageLocationGroupDO.setOrganizationId(null);
} else {
// 其他情况,只查询当前登录用户所属组织的数据
if (loginUser != null && loginUser.getUserPo() != null) {
Long userOrganizationId = loginUser.getUserPo().getOrganizationId();
if (userOrganizationId != null) {
storageLocationGroupDO.setOrganizationId(userOrganizationId);
}
} }
Long organizationId = loginUser.getUserPo().getOrganizationId(); }
if (organizationId != null && organizationId != 1){ // 处理topOrganizationId逻辑
storageLocationGroupDO.setOrganizationId(organizationId); if (loginUser != null && loginUser.getUserPo() != null) {
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
if (topOrganizationId != null && topOrganizationId != 1) {
storageLocationGroupDO.setTopOrganizationId(topOrganizationId);
} }
} }
return storageLocationGroupDomainService.queryList(storageLocationGroupDO); return storageLocationGroupDomainService.queryList(storageLocationGroupDO);
@@ -43,10 +43,18 @@ public class StorageSectionApplicationService {
public List<StorageSectionPO> queryList(StorageSectionDO storageSectionDO) { public List<StorageSectionPO> queryList(StorageSectionDO storageSectionDO) {
LoginUser loginUser = SecurityUtils.getLoginUser(); LoginUser loginUser = SecurityUtils.getLoginUser();
if (loginUser != null){ //前端传organizationId = 2827的时候查询所有组织的数据
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); Long frontendOrganizationId = storageSectionDO.getOrganizationId();
if (topOrganizationId != null && topOrganizationId != 1){ if (frontendOrganizationId != null && frontendOrganizationId == 2827L) {
storageSectionDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); // 前端传递2827时,查询所有组织的数据,将organizationId设置为null
storageSectionDO.setOrganizationId(null);
} else {
// 其他情况,只查询当前登录用户所属组织的数据
if (loginUser != null && loginUser.getUserPo() != null) {
Long userOrganizationId = loginUser.getUserPo().getOrganizationId();
if (userOrganizationId != null) {
storageSectionDO.setOrganizationId(userOrganizationId);
}
} }
} }
return storageSectionDomainService.queryList(storageSectionDO); return storageSectionDomainService.queryList(storageSectionDO);
@@ -42,10 +42,18 @@ public class WarehouseApplicationService {
public List<WarehousePO> queryList(WarehouseDO warehouseDO) { public List<WarehousePO> queryList(WarehouseDO warehouseDO) {
LoginUser loginUser = SecurityUtils.getLoginUser(); LoginUser loginUser = SecurityUtils.getLoginUser();
if (loginUser != null){ //前端传organizationId = 2827的时候查询所有组织的数据
Long organizationId = loginUser.getUserPo().getOrganizationId(); Long frontendOrganizationId = warehouseDO.getOrganizationId();
if (organizationId != null && organizationId != 1){ if (frontendOrganizationId != null && frontendOrganizationId == 2827L) {
warehouseDO.setOrganizationId(loginUser.getUserPo().getOrganizationId()); // 前端传递2827时,查询所有组织的数据,将organizationId设置为null
warehouseDO.setOrganizationId(null);
} else {
// 其他情况,只查询当前登录用户所属组织的数据
if (loginUser != null && loginUser.getUserPo() != null) {
Long userOrganizationId = loginUser.getUserPo().getOrganizationId();
if (userOrganizationId != null) {
warehouseDO.setOrganizationId(userOrganizationId);
}
} }
} }
return warehouseDomainService.queryList(warehouseDO); return warehouseDomainService.queryList(warehouseDO);