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; 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() { private HashMap<String, String> getFieldProjectSnTables() {
HashMap<String, String> tables = new HashMap<>(16); HashMap<String, String> tables = new HashMap<>(16);
tables.put("notice_remind_sound", getProjectSn()); 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())) { if (Objects.equals(user.getAccountType(), SystemUserAccountTypeEnum.ENTERPRISE_ADMINISTRATOR_ACCOUNT.getValue())) {
filterForCompanyOrProject(plainSelect, ds, expressions, SecurityUtils.getUser().getUserId(), (userFilterItem) -> get1CompanySql(SecurityUtils.getUser().getUserId(), userFilterItem), jo); filterForCompanyOrProject(plainSelect, ds, expressions, SecurityUtils.getUser().getUserId(), (userFilterItem) -> get1CompanySql(SecurityUtils.getUser().getUserId(), userFilterItem), jo);
filterProjectForCompany(plainSelect, user, ds, jo); filterProjectForCompany(plainSelect, user, ds, jo);
filterHeadquartersSnForCompany(plainSelect, jo, ds);
} else if (Objects.equals(user.getAccountType(), SystemUserAccountTypeEnum.ENTERPRISE_DISTRICT_ACCOUNT.getValue())) { } 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); filterForCompanyOrProject(plainSelect, ds, expressions, SecurityUtils.getUser().getUserId(), (userFilterItem) -> get2CompanySql(SecurityUtils.getUser().getUserId(), userFilterItem), jo);
filterProjectForCompany(plainSelect, user, ds, jo); filterProjectForCompany(plainSelect, user, ds, jo);
filterHeadquartersSnForCompany(plainSelect, jo, ds);
} else if (Objects.equals(user.getAccountType(), SystemUserAccountTypeEnum.ENTERPRISE_CITY_ACCOUNT.getValue())) { } 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); filterForCompanyOrProject(plainSelect, ds, expressions, SecurityUtils.getUser().getUserId(), (userFilterItem) -> get3CompanySql(SecurityUtils.getUser().getUserId(), userFilterItem), jo);
filterProjectForCompany(plainSelect, user, ds, jo); filterProjectForCompany(plainSelect, user, ds, jo);
filterHeadquartersSnForCompany(plainSelect, jo, ds);
} else if (Objects.equals(user.getAccountType(), SystemUserAccountTypeEnum.ENTERPRISE_SUB_ACCOUNT.getValue())) { } 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); filterForCompanyOrProject(plainSelect, ds, expressions, SecurityUtils.getUser().getUserId(), (userFilterItem) -> get4CompanySql(SecurityUtils.getUser().getUserId(), userFilterItem), jo);
filterProjectForCompany(plainSelect, user, ds, jo); filterProjectForCompany(plainSelect, user, ds, jo);
filterHeadquartersSnForCompany(plainSelect, jo, ds);
} else if (Objects.equals(user.getAccountType(), SystemUserAccountTypeEnum.PROJECT_ACCOUNT.getValue())) { } else if (Objects.equals(user.getAccountType(), SystemUserAccountTypeEnum.PROJECT_ACCOUNT.getValue())) {
filterForCompanyOrProject(plainSelect, ds, expressions, SecurityUtils.getUser().getUserId(), (userFilterItem) -> { filterForCompanyOrProject(plainSelect, ds, expressions, SecurityUtils.getUser().getUserId(), (userFilterItem) -> {
return StrUtil.format(" \n" + 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)); " ) and {}.account_type = 6", userFilterItem, SecurityUtils.getUser().getUserId(), StrUtil.subBefore(userFilterItem, ".", true));
}, jo); }, jo);
filterProjectForProject(plainSelect, ds, jo); filterProjectForProject(plainSelect, ds, jo);
filterHeadquartersSnForProject(plainSelect, jo, ds);
} else if (Objects.equals(user.getAccountType(), SystemUserAccountTypeEnum.PROJECT_SUB_ACCOUNT.getValue())) { } else if (Objects.equals(user.getAccountType(), SystemUserAccountTypeEnum.PROJECT_SUB_ACCOUNT.getValue())) {
filterByProjectSubAccount(plainSelect, ds, expressions, jo); filterByProjectSubAccount(plainSelect, ds, expressions, jo);
filterHeadquartersSnForProject(plainSelect, jo, ds);
} else if (Objects.equals(user.getAccountType(), SystemUserAccountTypeEnum.SUPPLIER.getValue())) { } else if (Objects.equals(user.getAccountType(), SystemUserAccountTypeEnum.SUPPLIER.getValue())) {
filterBySupplier(plainSelect, ds, expressions, jo); filterBySupplier(plainSelect, ds, expressions, jo);
} }
@ -313,6 +325,40 @@ public class DataScopeHandler implements DataPermissionHandler {
return plainSelect; 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 * 企业过滤项目sn
* *
@ -321,12 +367,12 @@ public class DataScopeHandler implements DataPermissionHandler {
* @param ds * @param ds
*/ */
private void filterProjectForCompany(PlainSelect plainSelect, UserInfo user, DataScope ds, JSONObject param) { 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); List<String> filterProjectItems = getNeedFilterLeftExpression(plainSelect, getFieldProjectSnTables(), ds, param);
if (CollUtil.isNotEmpty(filterProjectItems)) { 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) { for (String item : filterProjectItems) {
inExpression(item, projectSns, plainSelect); 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) { private void filterByProjectSubAccount(PlainSelect plainSelect, DataScope ds, List<Expression> expressions, JSONObject param) {
filterProjectForProject(plainSelect, ds, param); filterProjectForProject(plainSelect, ds, param);
List<String> authEnterpriseIds = userEnterpriseService.getEnterpriseIdsIfSubProject();
authEnterpriseIds.add("0");
List<String> filterEnterprises = getNeedFilterLeftExpression(plainSelect, getFieldEnterpriseTables(), ds, param); List<String> filterEnterprises = getNeedFilterLeftExpression(plainSelect, getFieldEnterpriseTables(), ds, param);
if (CollUtil.isNotEmpty(filterEnterprises)) { if (CollUtil.isNotEmpty(filterEnterprises)) {
List<String> authEnterpriseIds = userEnterpriseService.getEnterpriseIdsIfSubProject();
authEnterpriseIds.add("0");
for (String filterEnterprise : filterEnterprises) { for (String filterEnterprise : filterEnterprises) {
inExpression(filterEnterprise, authEnterpriseIds, plainSelect); inExpression(filterEnterprise, authEnterpriseIds, plainSelect);
} }
@ -417,6 +463,8 @@ public class DataScopeHandler implements DataPermissionHandler {
ocrBuildLogTables.put("ocr_build_log", "id"); ocrBuildLogTables.put("ocr_build_log", "id");
List<String> filterOcrBuildLogTables = getNeedFilterLeftExpression(plainSelect, ocrBuildLogTables, ds, param); List<String> filterOcrBuildLogTables = getNeedFilterLeftExpression(plainSelect, ocrBuildLogTables, ds, param);
if (CollUtil.isNotEmpty(filterOcrBuildLogTables)) { if (CollUtil.isNotEmpty(filterOcrBuildLogTables)) {
List<String> authEnterpriseIds = userEnterpriseService.getEnterpriseIdsIfSubProject();
authEnterpriseIds.add("0");
for (String filterEnterprise : filterOcrBuildLogTables) { for (String filterEnterprise : filterOcrBuildLogTables) {
String uploaderIdField = StrUtil.subBefore(filterEnterprise, ".", false) + "." + "uploader_id"; 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 ( {} = {}))", 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"), @ApiImplicitParam(name = "projectSn", value = "项目sn", paramType = "body", required = true, dataType = "String"),
}) })
@PostMapping(value = "/list") @PostMapping(value = "/list")
@PreAuthorize("@perm.hasProjectSnAccess(#map['projectSn'])")
public Result<List<NoticeRemindSound>> selectList(@RequestBody Map<String, Object> map) { public Result<List<NoticeRemindSound>> selectList(@RequestBody Map<String, Object> map) {
QueryWrapper<NoticeRemindSound> queryWrapper = new QueryWrapper<>(); QueryWrapper<NoticeRemindSound> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(NoticeRemindSound::getProjectSn, MapUtils.getString(map, "projectSn")); 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 getHeadquartersSnByProjectSn(String projectSn);
String getHeadquartersSnByCompanySn(String companySn);
boolean hasCompanySnAccessBy1(Long userId, String sn); boolean hasCompanySnAccessBy1(Long userId, String sn);
boolean hasCompanySnAccessBy2(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 @Override
public String getHeadquartersSnByProjectSn(String projectSn) { public String getHeadquartersSnByProjectSn(String projectSn) {
Project project = projectService.getOne(new LambdaQueryWrapper<Project>() Project project = projectService.getOne(new LambdaQueryWrapper<Project>()
.eq(Project::getProjectSn, projectSn)); .eq(Project::getProjectSn, projectSn).last(Cts.IGNORE_DATA_SCOPE_CONDITION));
if (project == null) { if (project == null) {
throw new OpenAlertException("查询企业失败"); throw new OpenAlertException("查询项目失败");
} }
return this.getOne(new LambdaQueryWrapper<Company>() return this.getOne(new LambdaQueryWrapper<Company>()
.eq(Company::getCompanySn, project.getCompanySn())).getHeadquartersSn(); .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 @Override
public boolean hasCompanySnAccessBy1(Long userId, String sn) { public boolean hasCompanySnAccessBy1(Long userId, String sn) {
return baseMapper.hasCompanySnAccessBy1(userId, sn); return baseMapper.hasCompanySnAccessBy1(userId, sn);

View File

@ -133,6 +133,8 @@ public class WorkTicketTypeController {
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name = "pageNo", value = "第几页", paramType = "query", required = true, dataType = "Integer"), @ApiImplicitParam(name = "pageNo", value = "第几页", paramType = "query", required = true, dataType = "Integer"),
@ApiImplicitParam(name = "pageSize", 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") @GetMapping(value = "/tree/page")
public Result<IPage<WorkTicketTypeVo>> queryTreePage(@ApiIgnore @RequestParam HashMap<String, Object> param) { public Result<IPage<WorkTicketTypeVo>> queryTreePage(@ApiIgnore @RequestParam HashMap<String, Object> param) {

View File

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