WorkTicketType权限修复

This commit is contained in:
guoshengxiong 2025-09-16 10:00:27 +08:00
parent 4d41de5d08
commit 004a5f4844
6 changed files with 71 additions and 9 deletions

View File

@ -129,6 +129,12 @@ public class DataScopeHandler implements DataPermissionHandler {
return tables;
}
private HashMap<String, String> getFieldHeadquartersSnTables() {
HashMap<String, String> tables = new HashMap<>(16);
tables.put("work_ticket_type", "sn");
return tables;
}
private HashMap<String, String> getFieldProjectSnTables() {
HashMap<String, String> tables = new HashMap<>(16);
tables.put("notice_remind_sound", getProjectSn());
@ -221,15 +227,19 @@ public class DataScopeHandler implements DataPermissionHandler {
if (Objects.equals(user.getAccountType(), SystemUserAccountTypeEnum.ENTERPRISE_ADMINISTRATOR_ACCOUNT.getValue())) {
filterForCompanyOrProject(plainSelect, ds, expressions, SecurityUtils.getUser().getUserId(), (userFilterItem) -> get1CompanySql(SecurityUtils.getUser().getUserId(), userFilterItem), jo);
filterProjectForCompany(plainSelect, user, ds, jo);
filterHeadquartersSnForCompany(plainSelect, jo, ds);
} else if (Objects.equals(user.getAccountType(), SystemUserAccountTypeEnum.ENTERPRISE_DISTRICT_ACCOUNT.getValue())) {
filterForCompanyOrProject(plainSelect, ds, expressions, SecurityUtils.getUser().getUserId(), (userFilterItem) -> get2CompanySql(SecurityUtils.getUser().getUserId(), userFilterItem), jo);
filterProjectForCompany(plainSelect, user, ds, jo);
filterHeadquartersSnForCompany(plainSelect, jo, ds);
} else if (Objects.equals(user.getAccountType(), SystemUserAccountTypeEnum.ENTERPRISE_CITY_ACCOUNT.getValue())) {
filterForCompanyOrProject(plainSelect, ds, expressions, SecurityUtils.getUser().getUserId(), (userFilterItem) -> get3CompanySql(SecurityUtils.getUser().getUserId(), userFilterItem), jo);
filterProjectForCompany(plainSelect, user, ds, jo);
filterHeadquartersSnForCompany(plainSelect, jo, ds);
} else if (Objects.equals(user.getAccountType(), SystemUserAccountTypeEnum.ENTERPRISE_SUB_ACCOUNT.getValue())) {
filterForCompanyOrProject(plainSelect, ds, expressions, SecurityUtils.getUser().getUserId(), (userFilterItem) -> get4CompanySql(SecurityUtils.getUser().getUserId(), userFilterItem), jo);
filterProjectForCompany(plainSelect, user, ds, jo);
filterHeadquartersSnForCompany(plainSelect, jo, ds);
} else if (Objects.equals(user.getAccountType(), SystemUserAccountTypeEnum.PROJECT_ACCOUNT.getValue())) {
filterForCompanyOrProject(plainSelect, ds, expressions, SecurityUtils.getUser().getUserId(), (userFilterItem) -> {
return StrUtil.format(" \n" +
@ -240,8 +250,10 @@ public class DataScopeHandler implements DataPermissionHandler {
" ) and {}.account_type = 6", userFilterItem, SecurityUtils.getUser().getUserId(), StrUtil.subBefore(userFilterItem, ".", true));
}, jo);
filterProjectForProject(plainSelect, ds, jo);
filterHeadquartersSnForProject(plainSelect, jo, ds);
} else if (Objects.equals(user.getAccountType(), SystemUserAccountTypeEnum.PROJECT_SUB_ACCOUNT.getValue())) {
filterByProjectSubAccount(plainSelect, ds, expressions, jo);
filterHeadquartersSnForProject(plainSelect, jo, ds);
} else if (Objects.equals(user.getAccountType(), SystemUserAccountTypeEnum.SUPPLIER.getValue())) {
filterBySupplier(plainSelect, ds, expressions, jo);
}
@ -313,6 +325,40 @@ public class DataScopeHandler implements DataPermissionHandler {
return plainSelect;
}
/**
* 企业过滤总公司sn
*
* @param plainSelect
* @param jo
* @param ds
*/
private void filterHeadquartersSnForCompany(PlainSelect plainSelect, JSONObject jo, DataScope ds) {
List<String> filterHeadquartersSnItems = getNeedFilterLeftExpression(plainSelect, getFieldHeadquartersSnTables(), ds, jo);
if (CollUtil.isNotEmpty(filterHeadquartersSnItems)) {
String headquartersSn = companyService.getHeadquartersSnByCompanySn(SecurityUtils.getUser().getSn());
for (String item : filterHeadquartersSnItems) {
equalsTo(item, headquartersSn, plainSelect);
}
}
}
/**
* 项目过滤总公司sn
*
* @param plainSelect
* @param jo
* @param ds
*/
private void filterHeadquartersSnForProject(PlainSelect plainSelect, JSONObject jo, DataScope ds) {
List<String> filterHeadquartersSnItems = getNeedFilterLeftExpression(plainSelect, getFieldHeadquartersSnTables(), ds, jo);
if (CollUtil.isNotEmpty(filterHeadquartersSnItems)) {
String headquartersSn = companyService.getHeadquartersSnByProjectSn(SecurityUtils.getUser().getSn());
for (String item : filterHeadquartersSnItems) {
equalsTo(item, headquartersSn, plainSelect);
}
}
}
/**
* 企业过滤项目sn
*
@ -321,12 +367,12 @@ public class DataScopeHandler implements DataPermissionHandler {
* @param ds
*/
private void filterProjectForCompany(PlainSelect plainSelect, UserInfo user, DataScope ds, JSONObject param) {
List<String> projectSns = companyService.getProjectSnsBySn(SecurityUtils.getUser().getSn(), user.getAccountType());
if (CollUtil.isEmpty(projectSns)) {
projectSns.add("0");
}
List<String> filterProjectItems = getNeedFilterLeftExpression(plainSelect, getFieldProjectSnTables(), ds, param);
if (CollUtil.isNotEmpty(filterProjectItems)) {
List<String> projectSns = companyService.getProjectSnsBySn(SecurityUtils.getUser().getSn(), user.getAccountType());
if (CollUtil.isEmpty(projectSns)) {
projectSns.add("0");
}
for (String item : filterProjectItems) {
inExpression(item, projectSns, plainSelect);
}
@ -381,10 +427,10 @@ public class DataScopeHandler implements DataPermissionHandler {
*/
private void filterByProjectSubAccount(PlainSelect plainSelect, DataScope ds, List<Expression> expressions, JSONObject param) {
filterProjectForProject(plainSelect, ds, param);
List<String> authEnterpriseIds = userEnterpriseService.getEnterpriseIdsIfSubProject();
authEnterpriseIds.add("0");
List<String> filterEnterprises = getNeedFilterLeftExpression(plainSelect, getFieldEnterpriseTables(), ds, param);
if (CollUtil.isNotEmpty(filterEnterprises)) {
List<String> authEnterpriseIds = userEnterpriseService.getEnterpriseIdsIfSubProject();
authEnterpriseIds.add("0");
for (String filterEnterprise : filterEnterprises) {
inExpression(filterEnterprise, authEnterpriseIds, plainSelect);
}
@ -417,6 +463,8 @@ public class DataScopeHandler implements DataPermissionHandler {
ocrBuildLogTables.put("ocr_build_log", "id");
List<String> filterOcrBuildLogTables = getNeedFilterLeftExpression(plainSelect, ocrBuildLogTables, ds, param);
if (CollUtil.isNotEmpty(filterOcrBuildLogTables)) {
List<String> authEnterpriseIds = userEnterpriseService.getEnterpriseIdsIfSubProject();
authEnterpriseIds.add("0");
for (String filterEnterprise : filterOcrBuildLogTables) {
String uploaderIdField = StrUtil.subBefore(filterEnterprise, ".", false) + "." + "uploader_id";
String sql = StrUtil.format(" ( ({} in (select ocr_build_log_id from ocr_build_log_enterprise where enterprise_id in ({}))) OR ( {} = {}))",

View File

@ -47,7 +47,6 @@ public class NoticeRemindSoundController {
@ApiImplicitParam(name = "projectSn", value = "项目sn", paramType = "body", required = true, dataType = "String"),
})
@PostMapping(value = "/list")
@PreAuthorize("@perm.hasProjectSnAccess(#map['projectSn'])")
public Result<List<NoticeRemindSound>> selectList(@RequestBody Map<String, Object> map) {
QueryWrapper<NoticeRemindSound> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(NoticeRemindSound::getProjectSn, MapUtils.getString(map, "projectSn"));

View File

@ -196,6 +196,8 @@ public interface ICompanyService extends IService<Company> {
*/
String getHeadquartersSnByProjectSn(String projectSn);
String getHeadquartersSnByCompanySn(String companySn);
boolean hasCompanySnAccessBy1(Long userId, String sn);
boolean hasCompanySnAccessBy2(Long userId, String sn);

View File

@ -966,14 +966,24 @@ public class CompanyServiceImpl extends ServiceImpl<CompanyMapper, Company> impl
@Override
public String getHeadquartersSnByProjectSn(String projectSn) {
Project project = projectService.getOne(new LambdaQueryWrapper<Project>()
.eq(Project::getProjectSn, projectSn));
.eq(Project::getProjectSn, projectSn).last(Cts.IGNORE_DATA_SCOPE_CONDITION));
if (project == null) {
throw new OpenAlertException("查询企业失败");
throw new OpenAlertException("查询项目失败");
}
return this.getOne(new LambdaQueryWrapper<Company>()
.eq(Company::getCompanySn, project.getCompanySn())).getHeadquartersSn();
}
@Override
public String getHeadquartersSnByCompanySn(String companySn) {
Company company = this.getOne(new LambdaQueryWrapper<Company>()
.eq(Company::getCompanySn, companySn));
if (company == null) {
throw new OpenAlertException("查询企业失败");
}
return company.getHeadquartersSn();
}
@Override
public boolean hasCompanySnAccessBy1(Long userId, String sn) {
return baseMapper.hasCompanySnAccessBy1(userId, sn);

View File

@ -133,6 +133,8 @@ public class WorkTicketTypeController {
@ApiImplicitParams({
@ApiImplicitParam(name = "pageNo", value = "第几页", paramType = "query", required = true, dataType = "Integer"),
@ApiImplicitParam(name = "pageSize", value = "每页显示条数", paramType = "query", required = true, dataType = "Integer"),
@ApiImplicitParam(name = "projectSn", value = "项目sn", paramType = "query", required = false, dataType = "Integer"),
@ApiImplicitParam(name = "sn", value = "总企业sn", paramType = "query", required = false, dataType = "Integer"),
})
@GetMapping(value = "/tree/page")
public Result<IPage<WorkTicketTypeVo>> queryTreePage(@ApiIgnore @RequestParam HashMap<String, Object> param) {

View File

@ -21,6 +21,7 @@ import java.util.List;
* @version V1.0
*/
@Mapper
@DataScope
public interface WorkTicketTypeMapper extends BaseMapper<WorkTicketType> {
/**