Search in sources :

Example 1 with TrainingRegister

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);
}
Also used : Training(top.hcode.hoj.pojo.entity.training.Training) TrainingRegister(top.hcode.hoj.pojo.entity.training.TrainingRegister) QueryWrapper(com.baomidou.mybatisplus.core.conditions.query.QueryWrapper) HashMap(java.util.HashMap) HttpSession(javax.servlet.http.HttpSession) UserRolesVo(top.hcode.hoj.pojo.vo.UserRolesVo) RequiresAuthentication(org.apache.shiro.authz.annotation.RequiresAuthentication)

Example 2 with TrainingRegister

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;
}
Also used : TrainingRegister(top.hcode.hoj.pojo.entity.training.TrainingRegister) QueryWrapper(com.baomidou.mybatisplus.core.conditions.query.QueryWrapper)

Example 3 with TrainingRegister

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;
}
Also used : Training(top.hcode.hoj.pojo.entity.training.Training) TrainingRegister(top.hcode.hoj.pojo.entity.training.TrainingRegister) UpdateWrapper(com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper) QueryWrapper(com.baomidou.mybatisplus.core.conditions.query.QueryWrapper) TrainingCategory(top.hcode.hoj.pojo.entity.training.TrainingCategory) MappingTrainingCategory(top.hcode.hoj.pojo.entity.training.MappingTrainingCategory) MappingTrainingCategory(top.hcode.hoj.pojo.entity.training.MappingTrainingCategory) Transactional(org.springframework.transaction.annotation.Transactional)

Example 4 with TrainingRegister

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;
}
Also used : TrainingRegister(top.hcode.hoj.pojo.entity.training.TrainingRegister) QueryWrapper(com.baomidou.mybatisplus.core.conditions.query.QueryWrapper) StatusAccessDeniedException(top.hcode.hoj.common.exception.StatusAccessDeniedException)

Example 5 with TrainingRegister

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("错误:你已被禁止参加该训练!");
    }
}
Also used : StatusForbiddenException(top.hcode.hoj.common.exception.StatusForbiddenException) TrainingRegister(top.hcode.hoj.pojo.entity.training.TrainingRegister) QueryWrapper(com.baomidou.mybatisplus.core.conditions.query.QueryWrapper) StatusAccessDeniedException(top.hcode.hoj.common.exception.StatusAccessDeniedException)

Aggregations

QueryWrapper (com.baomidou.mybatisplus.core.conditions.query.QueryWrapper)7 TrainingRegister (top.hcode.hoj.pojo.entity.training.TrainingRegister)7 Training (top.hcode.hoj.pojo.entity.training.Training)4 UserRolesVo (top.hcode.hoj.pojo.vo.UserRolesVo)3 UpdateWrapper (com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper)2 HttpSession (javax.servlet.http.HttpSession)2 Transactional (org.springframework.transaction.annotation.Transactional)2 StatusAccessDeniedException (top.hcode.hoj.common.exception.StatusAccessDeniedException)2 StatusForbiddenException (top.hcode.hoj.common.exception.StatusForbiddenException)2 MappingTrainingCategory (top.hcode.hoj.pojo.entity.training.MappingTrainingCategory)2 TrainingCategory (top.hcode.hoj.pojo.entity.training.TrainingCategory)2 HashMap (java.util.HashMap)1 RequiresAuthentication (org.apache.shiro.authz.annotation.RequiresAuthentication)1 Session (org.apache.shiro.session.Session)1 StatusFailException (top.hcode.hoj.common.exception.StatusFailException)1