use of top.hcode.hoj.pojo.entity.training.TrainingRegister in project HOJ by HimitZH.
the class TrainingController method getTrainingAccess.
/**
* @param tid
* @param request
* @MethodName getTrainingAccess
* @Description 私有权限的训练需要获取当前用户是否有进入训练的权限
* @Return
* @Since 2021/11/20
*/
@RequiresAuthentication
@GetMapping("/get-training-access")
public CommonResult getTrainingAccess(@RequestParam(value = "tid") Long tid, HttpServletRequest request) {
// 获取当前登录的用户
HttpSession session = request.getSession();
UserRolesVo userRolesVo = (UserRolesVo) session.getAttribute("userInfo");
QueryWrapper<TrainingRegister> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("tid", tid).eq("uid", userRolesVo.getUid());
TrainingRegister trainingRegister = trainingRegisterService.getOne(queryWrapper, false);
boolean access = false;
if (trainingRegister != null) {
access = true;
Training training = trainingService.getById(tid);
if (training == null || !training.getStatus()) {
return CommonResult.errorResponse("对不起,该训练不存在!");
}
}
HashMap<String, Object> result = new HashMap<>();
result.put("access", access);
return CommonResult.successResponse(result);
}
use of top.hcode.hoj.pojo.entity.training.TrainingRegister in project HOJ by HimitZH.
the class TrainingRegisterServiceImpl method checkTrainingRegister.
private CommonResult checkTrainingRegister(Long tid, String uid) {
QueryWrapper<TrainingRegister> trainingRegisterQueryWrapper = new QueryWrapper<>();
trainingRegisterQueryWrapper.eq("tid", tid);
trainingRegisterQueryWrapper.eq("uid", uid);
TrainingRegister trainingRegister = trainingRegisterMapper.selectOne(trainingRegisterQueryWrapper);
if (trainingRegister == null) {
return CommonResult.errorResponse("该训练属于私有,请先使用专属密码注册!", CommonResult.STATUS_ACCESS_DENIED);
}
if (!trainingRegister.getStatus()) {
return CommonResult.errorResponse("你已被禁止参加该训练!", CommonResult.STATUS_FORBIDDEN);
}
return null;
}
use of top.hcode.hoj.pojo.entity.training.TrainingRegister in project HOJ by HimitZH.
the class TrainingServiceImpl method updateTraining.
@Override
@Transactional(rollbackFor = Exception.class)
public boolean updateTraining(TrainingDto trainingDto) {
Training training = trainingDto.getTraining();
Training oldTraining = trainingMapper.selectById(training.getId());
trainingMapper.updateById(training);
// 私有训练 修改密码 需要清空之前注册训练的记录
if (training.getAuth().equals(Constants.Training.AUTH_PRIVATE.getValue())) {
if (!Objects.equals(training.getPrivatePwd(), oldTraining.getPrivatePwd())) {
UpdateWrapper<TrainingRegister> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("tid", training.getId());
trainingRegisterMapper.delete(updateWrapper);
}
}
TrainingCategory trainingCategory = trainingDto.getTrainingCategory();
if (trainingCategory.getId() == null) {
try {
trainingCategoryService.save(trainingCategory);
} catch (Exception ignored) {
QueryWrapper<TrainingCategory> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", trainingCategory.getName());
trainingCategory = trainingCategoryService.getOne(queryWrapper, false);
}
}
MappingTrainingCategory mappingTrainingCategory = mappingTrainingCategoryMapper.selectOne(new QueryWrapper<MappingTrainingCategory>().eq("tid", training.getId()));
if (mappingTrainingCategory == null) {
mappingTrainingCategoryMapper.insert(new MappingTrainingCategory().setTid(training.getId()).setCid(trainingCategory.getId()));
} else {
if (!mappingTrainingCategory.getCid().equals(trainingCategory.getId())) {
UpdateWrapper<MappingTrainingCategory> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("tid", training.getId()).set("cid", trainingCategory.getId());
int update = mappingTrainingCategoryMapper.update(null, updateWrapper);
return update > 0;
}
}
return true;
}
use of top.hcode.hoj.pojo.entity.training.TrainingRegister in project HOJ by HimitZH.
the class TrainingValidator method isInTrainingOrAdmin.
public boolean isInTrainingOrAdmin(Training training, UserRolesVo userRolesVo) throws StatusAccessDeniedException {
if (Constants.Training.AUTH_PRIVATE.getValue().equals(training.getAuth())) {
if (userRolesVo == null) {
throw new StatusAccessDeniedException("该训练属于私有题单,请先登录以校验权限!");
}
// 是否为超级管理员
boolean isRoot = SecurityUtils.getSubject().hasRole("root");
// 是否为该私有训练的创建者
boolean isAuthor = training.getAuthor().equals(userRolesVo.getUsername());
if (isRoot || isAuthor || (training.getIsGroup() && groupValidator.isGroupRoot(userRolesVo.getUid(), training.getGid()))) {
return true;
}
// 如果三者都不是,需要做注册权限校验
QueryWrapper<TrainingRegister> trainingRegisterQueryWrapper = new QueryWrapper<>();
trainingRegisterQueryWrapper.eq("tid", training.getId());
trainingRegisterQueryWrapper.eq("uid", userRolesVo.getUid());
TrainingRegister trainingRegister = trainingRegisterEntityService.getOne(trainingRegisterQueryWrapper, false);
return trainingRegister != null && trainingRegister.getStatus();
}
return true;
}
use of top.hcode.hoj.pojo.entity.training.TrainingRegister in project HOJ by HimitZH.
the class TrainingValidator method checkTrainingRegister.
private void checkTrainingRegister(Long tid, String uid) throws StatusAccessDeniedException, StatusForbiddenException {
QueryWrapper<TrainingRegister> trainingRegisterQueryWrapper = new QueryWrapper<>();
trainingRegisterQueryWrapper.eq("tid", tid);
trainingRegisterQueryWrapper.eq("uid", uid);
TrainingRegister trainingRegister = trainingRegisterEntityService.getOne(trainingRegisterQueryWrapper, false);
if (trainingRegister == null) {
throw new StatusAccessDeniedException("该训练属于私有,请先使用专属密码注册!");
}
if (!trainingRegister.getStatus()) {
throw new StatusForbiddenException("错误:你已被禁止参加该训练!");
}
}
Aggregations