fix: 80955 【水平越权】问答库-部分接口未处理水平越权
This commit is contained in:
+99
-98
@@ -24,120 +24,121 @@ import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.poi.ss.formula.functions.T;
|
||||
|
||||
|
||||
/**
|
||||
/**
|
||||
* @Description: 问答库-问题
|
||||
* @Author: jero-boot
|
||||
* @Date: 2023-09-28
|
||||
* @Date: 2023-09-28
|
||||
* @Version: V1.0
|
||||
*/
|
||||
@Api(tags="问答库")
|
||||
@Api(tags = "问答库")
|
||||
@RestController
|
||||
@RequestMapping("/laws/library/lawsProblemLibrary")
|
||||
@Slf4j
|
||||
public class LawsProblemLibraryController extends JeroController<LawsProblemLibrary, ILawsProblemLibraryService> {
|
||||
@Autowired
|
||||
private ILawsProblemLibraryService lawsProblemLibraryService;
|
||||
|
||||
@AutoLog(value = "问答库-分页列表查询")
|
||||
@ApiOperation(value="问答库-分页列表查询", notes="问答库-问题-分页列表查询")
|
||||
@GetMapping(value = "/page")
|
||||
@RequiresPermissions("businessSupport:questionAnswer:search")
|
||||
public Result<IPage<LawsProblemLibrary>> queryPageList(LawsProblemLibrary lawsProblemLibrary,
|
||||
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
|
||||
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
|
||||
HttpServletRequest req) {
|
||||
IPage<LawsProblemLibrary> pageList = lawsProblemLibraryService.queryPage(lawsProblemLibrary, pageNo, pageSize, req);
|
||||
return Result.OK(pageList);
|
||||
}
|
||||
@Autowired
|
||||
private ILawsProblemLibraryService lawsProblemLibraryService;
|
||||
|
||||
@AutoLog(value = "问答库-提出问题")
|
||||
@ApiOperation(value="问答库-提出问题", notes="问答库-提出问题")
|
||||
@PostMapping(value = "/addProblem")
|
||||
@RequiresPermissions("businessSupport:questionAnswer:quiz")
|
||||
public Result<T> addProblem(@Validated @RequestBody LawsProblemLibrary lawsProblemLibrary) {
|
||||
lawsProblemLibraryService.addProblem(lawsProblemLibrary);
|
||||
return Result.OK(ResultCommon.OK);
|
||||
}
|
||||
@AutoLog(value = "问答库-分页列表查询")
|
||||
@ApiOperation(value = "问答库-分页列表查询", notes = "问答库-问题-分页列表查询")
|
||||
@GetMapping(value = "/page")
|
||||
@RequiresPermissions("businessSupport:questionAnswer:search")
|
||||
public Result<IPage<LawsProblemLibrary>> queryPageList(LawsProblemLibrary lawsProblemLibrary,
|
||||
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
|
||||
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
|
||||
HttpServletRequest req) {
|
||||
IPage<LawsProblemLibrary> pageList = lawsProblemLibraryService.queryPage(lawsProblemLibrary, pageNo, pageSize, req);
|
||||
return Result.OK(pageList);
|
||||
}
|
||||
|
||||
@AutoLog(value = "国内标准-提出问题")
|
||||
@ApiOperation(value="国内标准-提出问题", notes="国内标准-提出问题")
|
||||
@PostMapping(value = "/addProblem/GB")
|
||||
@RequiresPermissions("domesticStandard:submitQuestion")
|
||||
public Result<T> addProblemGB(@Validated @RequestBody LawsProblemLibrary lawsProblemLibrary) {
|
||||
lawsProblemLibrary.setType("1");
|
||||
lawsProblemLibraryService.addProblem(lawsProblemLibrary);
|
||||
return Result.OK(ResultCommon.OK);
|
||||
}
|
||||
@AutoLog(value = "问答库-提出问题")
|
||||
@ApiOperation(value = "问答库-提出问题", notes = "问答库-提出问题")
|
||||
@PostMapping(value = "/addProblem")
|
||||
@RequiresPermissions("businessSupport:questionAnswer:quiz")
|
||||
public Result<T> addProblem(@Validated @RequestBody LawsProblemLibrary lawsProblemLibrary) {
|
||||
lawsProblemLibraryService.addProblem(lawsProblemLibrary);
|
||||
return Result.OK(ResultCommon.OK);
|
||||
}
|
||||
|
||||
@AutoLog(value = "海外标准-提出问题")
|
||||
@ApiOperation(value="海外标准-提出问题", notes="海外标准-提出问题")
|
||||
@PostMapping(value = "/addProblem/FB")
|
||||
@RequiresPermissions("overseasStandard:submitQuestion")
|
||||
public Result<T> addProblemFB(@Validated @RequestBody LawsProblemLibrary lawsProblemLibrary) {
|
||||
lawsProblemLibrary.setType("2");
|
||||
lawsProblemLibraryService.addProblem(lawsProblemLibrary);
|
||||
return Result.OK(ResultCommon.OK);
|
||||
}
|
||||
@AutoLog(value = "国内标准-提出问题")
|
||||
@ApiOperation(value = "国内标准-提出问题", notes = "国内标准-提出问题")
|
||||
@PostMapping(value = "/addProblem/GB")
|
||||
@RequiresPermissions("domesticStandard:submitQuestion")
|
||||
public Result<T> addProblemGB(@Validated @RequestBody LawsProblemLibrary lawsProblemLibrary) {
|
||||
lawsProblemLibrary.setType("1");
|
||||
lawsProblemLibraryService.addProblem(lawsProblemLibrary);
|
||||
return Result.OK(ResultCommon.OK);
|
||||
}
|
||||
|
||||
@AutoLog(value = "企业标准-提出问题")
|
||||
@ApiOperation(value="企业标准-提出问题", notes="企业标准-提出问题")
|
||||
@PostMapping(value = "/addProblem/QB")
|
||||
@RequiresPermissions("enterpriseStandard:detail:submitQuestion")
|
||||
public Result<T> addProblemQB(@Validated @RequestBody LawsProblemLibrary lawsProblemLibrary) {
|
||||
lawsProblemLibrary.setType("3");
|
||||
lawsProblemLibraryService.addProblem(lawsProblemLibrary);
|
||||
return Result.OK(ResultCommon.OK);
|
||||
}
|
||||
@AutoLog(value = "海外标准-提出问题")
|
||||
@ApiOperation(value = "海外标准-提出问题", notes = "海外标准-提出问题")
|
||||
@PostMapping(value = "/addProblem/FB")
|
||||
@RequiresPermissions("overseasStandard:submitQuestion")
|
||||
public Result<T> addProblemFB(@Validated @RequestBody LawsProblemLibrary lawsProblemLibrary) {
|
||||
lawsProblemLibrary.setType("2");
|
||||
lawsProblemLibraryService.addProblem(lawsProblemLibrary);
|
||||
return Result.OK(ResultCommon.OK);
|
||||
}
|
||||
|
||||
@AutoLog(value = "问答库-回答问题")
|
||||
@ApiOperation(value="问答库-回答问题", notes="问答库-回答问题")
|
||||
@PostMapping(value = "/addAnswer")
|
||||
@RequiresPermissions("quiz:detail:answerSubmit")
|
||||
public Result<T> addAnswer(@Validated @RequestBody LawsAnswerLibrary lawsAnswerLibrary) {
|
||||
lawsProblemLibraryService.addAnswer(lawsAnswerLibrary);
|
||||
return Result.OK(ResultCommon.OK);
|
||||
}
|
||||
@AutoLog(value = "企业标准-提出问题")
|
||||
@ApiOperation(value = "企业标准-提出问题", notes = "企业标准-提出问题")
|
||||
@PostMapping(value = "/addProblem/QB")
|
||||
@RequiresPermissions("enterpriseStandard:detail:submitQuestion")
|
||||
public Result<T> addProblemQB(@Validated @RequestBody LawsProblemLibrary lawsProblemLibrary) {
|
||||
lawsProblemLibrary.setType("3");
|
||||
lawsProblemLibraryService.addProblem(lawsProblemLibrary);
|
||||
return Result.OK(ResultCommon.OK);
|
||||
}
|
||||
|
||||
@AutoLog(value = "问答库-通过id查询")
|
||||
@ApiOperation(value="问答库-通过id查询", notes="问答库-通过id查询")
|
||||
@GetMapping(value = "/queryById")
|
||||
@Translation
|
||||
@RequiresPermissions("businessSupport:questionAnswer:detail")
|
||||
public Result<LawsProblemLibrary> queryById(@RequestParam(name="id") String id) {
|
||||
LawsProblemLibrary lawsProblemLibrary = lawsProblemLibraryService.queryById(id);
|
||||
return Result.OK(lawsProblemLibrary);
|
||||
}
|
||||
@AutoLog(value = "问答库-回答问题")
|
||||
@ApiOperation(value = "问答库-回答问题", notes = "问答库-回答问题")
|
||||
@PostMapping(value = "/addAnswer")
|
||||
@RequiresPermissions("quiz:detail:answerSubmit")
|
||||
public Result<T> addAnswer(@Validated @RequestBody LawsAnswerLibrary lawsAnswerLibrary) {
|
||||
lawsProblemLibraryService.addAnswer(lawsAnswerLibrary);
|
||||
return Result.OK(ResultCommon.OK);
|
||||
}
|
||||
|
||||
@AutoLog(value = "问答库-通过id删除问题")
|
||||
@ApiOperation(value="问答库-通过id删除问题", notes="问答库-通过id删除问题")
|
||||
@PostMapping(value = "/deleteProblem")
|
||||
@RequiresPermissions("businessSupport:questionAnswer:delete")
|
||||
public Result<T> deleteProblem(@RequestBody Map<String, String> map) {
|
||||
if(!map.containsKey("id") || StringUtils.isEmpty(map.get("id"))){
|
||||
return Result.error(MessageUtils.getMessage(ResultCommon.SELECT_DATA));
|
||||
}
|
||||
lawsProblemLibraryService.deleteProblem(map.get("id"));
|
||||
return Result.OK(ResultCommon.OK);
|
||||
}
|
||||
@AutoLog(value = "问答库-通过id查询")
|
||||
@ApiOperation(value = "问答库-通过id查询", notes = "问答库-通过id查询")
|
||||
@GetMapping(value = "/queryById")
|
||||
@Translation
|
||||
@RequiresPermissions("businessSupport:questionAnswer:detail")
|
||||
public Result<LawsProblemLibrary> queryById(@RequestParam(name = "id") String id) {
|
||||
LawsProblemLibrary lawsProblemLibrary = lawsProblemLibraryService.queryById(id);
|
||||
return Result.OK(lawsProblemLibrary);
|
||||
}
|
||||
|
||||
@AutoLog(value = "问答库-通过id删除回答")
|
||||
@ApiOperation(value="问答库-通过id删除回答", notes="问答库-通过id删除回答")
|
||||
@PostMapping(value = "/deleteAnswer")
|
||||
@RequiresPermissions("quiz:detail:deleteAnswer")
|
||||
public Result<T> deleteAnswer(@RequestBody Map<String, String> map) {
|
||||
if(!map.containsKey("id") || StringUtils.isEmpty(map.get("id"))){
|
||||
return Result.error(MessageUtils.getMessage(ResultCommon.SELECT_DATA));
|
||||
}
|
||||
lawsProblemLibraryService.deleteAnswer(map.get("id"));
|
||||
return Result.OK(ResultCommon.OK);
|
||||
}
|
||||
@AutoLog(value = "问答库-通过id删除问题")
|
||||
@ApiOperation(value = "问答库-通过id删除问题", notes = "问答库-通过id删除问题")
|
||||
@PostMapping(value = "/deleteProblem")
|
||||
@RequiresPermissions("businessSupport:questionAnswer:delete")
|
||||
public Result<T> deleteProblem(@RequestBody Map<String, String> map) {
|
||||
if (!map.containsKey("id") || StringUtils.isEmpty(map.get("id"))) {
|
||||
return Result.error(MessageUtils.getMessage(ResultCommon.SELECT_DATA));
|
||||
}
|
||||
lawsProblemLibraryService.deleteProblem(map.get("id"));
|
||||
return Result.OK(ResultCommon.OK);
|
||||
}
|
||||
|
||||
@AutoLog(value = "问答库-是否置顶")
|
||||
@ApiOperation(value="问答库-是否置顶", notes="问答库-是否置顶")
|
||||
@GetMapping(value = "/isTop")
|
||||
@RequiresPermissions("quiz:detail:topOrCancel")
|
||||
public Result<T> isTop(@RequestParam(name="id") String id) {
|
||||
lawsProblemLibraryService.isTop(id);
|
||||
return Result.OK(ResultCommon.OK);
|
||||
}
|
||||
@AutoLog(value = "问答库-通过id删除回答")
|
||||
@ApiOperation(value = "问答库-通过id删除回答", notes = "问答库-通过id删除回答")
|
||||
@PostMapping(value = "/deleteAnswer")
|
||||
@RequiresPermissions("quiz:detail:deleteAnswer")
|
||||
public Result<T> deleteAnswer(@RequestBody Map<String, String> map) {
|
||||
if (!map.containsKey("id") || StringUtils.isEmpty(map.get("id"))) {
|
||||
return Result.error(MessageUtils.getMessage(ResultCommon.SELECT_DATA));
|
||||
}
|
||||
lawsProblemLibraryService.deleteAnswer(map.get("id"));
|
||||
return Result.OK(ResultCommon.OK);
|
||||
}
|
||||
|
||||
@AutoLog(value = "问答库-是否置顶")
|
||||
@ApiOperation(value = "问答库-是否置顶", notes = "问答库-是否置顶")
|
||||
@GetMapping(value = "/isTop")
|
||||
@RequiresPermissions("quiz:detail:topOrCancel")
|
||||
public Result<T> isTop(@RequestParam(name = "id") String id) {
|
||||
lawsProblemLibraryService.isTop(id);
|
||||
return Result.OK(ResultCommon.OK);
|
||||
}
|
||||
}
|
||||
|
||||
+52
-3
@@ -1,5 +1,6 @@
|
||||
package com.jero.modules.laws.library.service.impl;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
@@ -16,6 +17,7 @@ import com.jero.modules.laws.library.entity.LawsProblemLibrary;
|
||||
import com.jero.modules.laws.library.mapper.LawsProblemLibraryMapper;
|
||||
import com.jero.modules.laws.library.service.ILawsAnswerLibraryService;
|
||||
import com.jero.modules.laws.library.service.ILawsProblemLibraryService;
|
||||
import com.jero.modules.sys.utils.UserUtils;
|
||||
import com.jero.modules.system.entity.SysDepart;
|
||||
import com.jero.modules.system.entity.SysDictItem;
|
||||
import com.jero.modules.system.entity.SysUser;
|
||||
@@ -25,6 +27,7 @@ import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.shiro.SecurityUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import com.jero.common.exception.JeroBootException;
|
||||
@@ -36,7 +39,9 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.jero.common.system.query.QueryGenerator;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.management.relation.Role;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
|
||||
@@ -44,7 +49,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
/**
|
||||
* @Description: 问答库-问题
|
||||
* @Author: jero-boot
|
||||
* @Date: 2023-09-28
|
||||
* @Date: 2023-09-28
|
||||
* @Version: V1.0
|
||||
*/
|
||||
@Service
|
||||
@@ -62,6 +67,12 @@ public class LawsProblemLibraryServiceImpl extends ServiceImpl<LawsProblemLibrar
|
||||
@Resource
|
||||
private SendMessageAPI sendMessageAPI;
|
||||
|
||||
@Resource
|
||||
private ISysUserService userService;
|
||||
|
||||
@Value("${adminRoleCode}")
|
||||
private String adminRoleCode;
|
||||
|
||||
@Override
|
||||
public IPage<LawsProblemLibrary> queryPage(LawsProblemLibrary lawsProblemLibrary, Integer pageNo, Integer pageSize,
|
||||
HttpServletRequest req) {
|
||||
@@ -115,6 +126,12 @@ public class LawsProblemLibraryServiceImpl extends ServiceImpl<LawsProblemLibrar
|
||||
throw new JeroBootException(ResultCommon.EMPTY_COMMON, "problemId");
|
||||
}
|
||||
|
||||
// 处理水平越权 自己提的问题自己不能回复
|
||||
LawsProblemLibrary problem = getById(lawsAnswerLibrary.getProblemId());
|
||||
if (loginUser.getUsername().equals(problem.getCreateBy())) {
|
||||
throw new JeroBootException(ResultCommon.NO_PERMISSION);
|
||||
}
|
||||
|
||||
lawsAnswerLibrary.setUserId(loginUser.getId());
|
||||
lawsAnswerLibrary.setOrgCode(loginUser.getOrgCode());
|
||||
lawsAnswerLibrary.setIsTop(0);
|
||||
@@ -137,7 +154,7 @@ public class LawsProblemLibraryServiceImpl extends ServiceImpl<LawsProblemLibrar
|
||||
@Override
|
||||
public LawsProblemLibrary queryById(String id) {
|
||||
LawsProblemLibrary lawsProblemLibrary = getById(id);
|
||||
if(Objects.isNull(lawsProblemLibrary)) {
|
||||
if (Objects.isNull(lawsProblemLibrary)) {
|
||||
throw new JeroBootException(ResultCommon.NO_CORRESPONDING_DATA_FOUND);
|
||||
}
|
||||
|
||||
@@ -183,6 +200,12 @@ public class LawsProblemLibraryServiceImpl extends ServiceImpl<LawsProblemLibrar
|
||||
**/
|
||||
@Override
|
||||
public void deleteProblem(String id) {
|
||||
// 处理水平越权 只有创建人可以删除问题
|
||||
LoginUser currentUser = UserUtils.getCurrentUser();
|
||||
LawsProblemLibrary problem = getById(id);
|
||||
if (!currentUser.getUsername().equals(problem.getCreateBy())) {
|
||||
throw new JeroBootException(ResultCommon.NO_PERMISSION);
|
||||
}
|
||||
removeById(id);
|
||||
}
|
||||
|
||||
@@ -193,6 +216,19 @@ public class LawsProblemLibraryServiceImpl extends ServiceImpl<LawsProblemLibrar
|
||||
**/
|
||||
@Override
|
||||
public void deleteAnswer(String id) {
|
||||
// 处理水平越权 管理员和创建者才可以删除所有评论 其他人只能删除自己的评论
|
||||
LoginUser currentUser = UserUtils.getCurrentUser();
|
||||
List<String> userRoleList = userService.getRole(currentUser.getUsername());
|
||||
LawsAnswerLibrary answer = lawsAnswerLibraryService.getById(id);
|
||||
LawsProblemLibrary problem = getById(answer.getProblemId());
|
||||
// 如果是管理员权限 则跳过验证
|
||||
List<String> adminRoleList = Arrays.asList(adminRoleCode.split(","));
|
||||
// 如果不是管理员权限 且不是问题创建者 且不是回答创建者 则没有权限
|
||||
if (adminRoleList.stream().noneMatch(userRoleList::contains)) {
|
||||
if (!currentUser.getUsername().equals(problem.getCreateBy())) {
|
||||
throw new JeroBootException(ResultCommon.NO_PERMISSION);
|
||||
}
|
||||
}
|
||||
lawsAnswerLibraryService.removeById(id);
|
||||
}
|
||||
|
||||
@@ -204,9 +240,22 @@ public class LawsProblemLibraryServiceImpl extends ServiceImpl<LawsProblemLibrar
|
||||
@Override
|
||||
public void isTop(String id) {
|
||||
LawsAnswerLibrary lawsAnswerLibrary = lawsAnswerLibraryService.getById(id);
|
||||
if(Objects.isNull(lawsAnswerLibrary)) {
|
||||
if (Objects.isNull(lawsAnswerLibrary)) {
|
||||
throw new JeroBootException(ResultCommon.NO_CORRESPONDING_DATA_FOUND);
|
||||
}
|
||||
// 处理水平越权 管理员和创建者才可以删除所有评论 其他人只能删除自己的评论
|
||||
LoginUser currentUser = UserUtils.getCurrentUser();
|
||||
List<String> userRoleList = userService.getRole(currentUser.getUsername());
|
||||
// 如果是管理员权限 则跳过验证
|
||||
List<String> adminRoleList = Arrays.asList(adminRoleCode.split(","));
|
||||
// 如果不是管理员权限 且不是问题创建者 且不是回答创建者 则没有权限
|
||||
if (adminRoleList.stream().noneMatch(userRoleList::contains)) {
|
||||
LawsProblemLibrary problem = getById(lawsAnswerLibrary.getProblemId());
|
||||
if (!currentUser.getUsername().equals(problem.getCreateBy())) {
|
||||
throw new JeroBootException(ResultCommon.NO_PERMISSION);
|
||||
}
|
||||
}
|
||||
|
||||
if (0 == lawsAnswerLibrary.getIsTop()) {
|
||||
lawsAnswerLibrary.setIsTop(1);
|
||||
// 发送消息
|
||||
|
||||
Reference in New Issue
Block a user