数据权限的修改

This commit is contained in:
1745237360-cloud
2026-01-10 16:39:33 +08:00
parent 29b24e8450
commit 4b427e1b2e
97 changed files with 3056 additions and 466 deletions
@@ -85,12 +85,25 @@ public class SysDictDataServiceImpl extends ServiceImpl<SysDictDataMapper, SysDi
if (ObjectUtil.isNull(loginUser)) {
throw new DigitalLogisticsException(UserError.TIMEOUT);
}
// 数据权限验证:南光组织(organizationId=2827)可以删除所有组织的数据,其他组织只能删除自己组织的数据
Long loginUserOrganizationId = loginUser.getUserPo().getOrganizationId();
Long loginUserTopOrganizationId = loginUser.getUserPo().getTopOrganizationId();
for (Long dictCode : dictCodes)
{
SysDictData data = selectDictDataById(dictCode);
if (ObjectUtil.notEqual(data.getTopOrganizationId(), loginUser.getUserPo().getTopOrganizationId())) {
throw new ServiceException("修改失败");
// 南光组织(organizationId=2827)可以删除所有组织的数据
if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
// 南光组织可以删除,不需要验证 topOrganizationId
} else {
// 其他组织:只能删除自己组织的数据
// 使用 Objects.equals 安全比较,处理 null 值的情况
if (!java.util.Objects.equals(data.getTopOrganizationId(), loginUserTopOrganizationId)) {
throw new ServiceException("删除失败:无权删除其他组织的字典数据");
}
}
dictDataMapper.deleteDictDataById(dictCode);
SysDictData dictData = new SysDictData();
dictData.setDictType(data.getDictType());
@@ -146,11 +159,25 @@ public class SysDictDataServiceImpl extends ServiceImpl<SysDictDataMapper, SysDi
if (ObjectUtil.isNull(sysDictData)) {
throw new ServiceException("字典数据未找到");
}
if ("Y".equals(sysDictData.getIsDefault())) {
throw new ServiceException("默认数据不允许修改");
}
if (ObjectUtil.notEqual(sysDictData.getTopOrganizationId(), loginUser.getUserPo().getTopOrganizationId())) {
throw new ServiceException("修改失败");
// 数据权限验证:南光组织(organizationId=2827)可以修改所有组织的数据(包括默认数据),其他组织只能修改自己组织的数据(包括默认数据)
Long loginUserOrganizationId = loginUser.getUserPo().getOrganizationId();
Long loginUserTopOrganizationId = loginUser.getUserPo().getTopOrganizationId();
Long dictDataTopOrganizationId = sysDictData.getTopOrganizationId();
Long dictDataOrganizationId = sysDictData.getOrganizationId();
// 南光组织(organizationId=2827)可以修改所有组织的数据(包括默认数据)
if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
// 南光组织可以修改,不需要验证 topOrganizationId
} else {
// 其他组织:只能修改自己组织的数据(包括默认数据)
// 使用 Objects.equals 安全比较,处理 null 值的情况
boolean isSameTopOrg = java.util.Objects.equals(dictDataTopOrganizationId, loginUserTopOrganizationId);
boolean isSameOrg = java.util.Objects.equals(dictDataOrganizationId, loginUserOrganizationId);
if (!isSameTopOrg || !isSameOrg) {
throw new ServiceException("修改失败:无权修改其他组织的字典数据");
}
}
data.setUpdateBy(loginUser.getUserPo().getUserName());
int row = dictDataMapper.updateDictData(data);