Pārlūkot izejas kodu

Merge branch 'DEV' into target-list-search

chenxz 8 gadi atpakaļ
vecāks
revīzija
aafaefe4a7

+ 1 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/ShiroConfiguration.java

@@ -76,7 +76,7 @@ public class ShiroConfiguration {
         shiroFilterFactoryBean.setSecurityManager(securityManager);
 
         Map<String, Filter> filters = new LinkedHashMap<String, Filter>();
-        filters.put("Authorizationfilter", new MyAuthorizationFilter());
+        filters.put("auth", new MyAuthorizationFilter());
         shiroFilterFactoryBean.setFilters(filters);
 
         Map<String, String> filterChainDefinitionManager = new LinkedHashMap<String, String>();

+ 2 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/ExamGroupUserDao.java

@@ -1,6 +1,7 @@
 package cn.iselab.mooctest.site.dao;
 
 import cn.iselab.mooctest.site.models.ExamGroupUser;
+import cn.iselab.mooctest.site.models.Task;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.repository.PagingAndSortingRepository;
 
@@ -8,4 +9,5 @@ import org.springframework.data.repository.PagingAndSortingRepository;
  * Created by shanshan on 2017/7/25.
  */
 public interface ExamGroupUserDao extends PagingAndSortingRepository<ExamGroupUser, Long>,JpaSpecificationExecutor<ExamGroupUser> {
+    ExamGroupUser findByIdAndParticipantId(Long examId, Long participantId);
 }

+ 2 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/ExamService.java

@@ -17,6 +17,8 @@ public interface ExamService {
 
     Page<ExamGroupUser> getExamsByParticipantId(Long participantId, Byte type, Integer status, String keyword, Pageable pageable);
 
+    Task getExamByIdAndParticipantId(Long examId, Long participantId);
+
     Task createExam(Task exam, List<Long> groupIds);
 
     Task updateExam(Task exam);

+ 11 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/ExamServiceImpl.java

@@ -9,7 +9,9 @@ import cn.iselab.mooctest.site.models.*;
 import cn.iselab.mooctest.site.service.BaseService;
 import cn.iselab.mooctest.site.service.ExamService;
 import cn.iselab.mooctest.site.web.exception.HttpBadRequestException;
+import cn.iselab.mooctest.site.web.util.Converter;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.authz.UnauthorizedException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 
@@ -53,6 +55,15 @@ public class ExamServiceImpl extends BaseService implements ExamService {
     }
 
     @Override
+    public Task getExamByIdAndParticipantId(Long examId, Long participantId) {
+        ExamGroupUser examGroupUser = examGroupUserDao.findByIdAndParticipantId(examId, participantId);
+        if(examGroupUser == null){
+            throw new UnauthorizedException("unauthorized");
+        }
+        return Converter.convert(Task.class, examGroupUser);
+    }
+
+    @Override
     public Task createExam(Task exam, List<Long> groupIds) {
         //eeee
         exam.setSubsiteId(SubsiteConstants.DEV_SUBSITE_ID);

+ 5 - 3
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/ExamController.java

@@ -78,11 +78,13 @@ public class ExamController extends BaseController {
     public ExamVO getExamById(@PathVariable Long examId) {
         User user = (User) SecurityUtils.getSubject().getSession().getAttribute("User");
         String permissionStr = user.getId().toString() + ":task:view:" + examId.toString();
+        boolean isOwner = SecurityUtils.getSubject().isPermitted(new TaskPermission(permissionStr));
 
-        if (!SecurityUtils.getSubject().isPermitted(new TaskPermission(permissionStr))) {
-            throw new UnauthorizedException("unauthorized");
+        if (isOwner) {
+            return examLogic.getExamById(examId);
+        }else {
+             return examLogic.getExamByIdAndParticipantId(examId,user.getId());
         }
-        return examLogic.getExamById(examId);
     }
 
     @RequiresPermissions("task:create")

+ 1 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/ExamLogic.java

@@ -14,6 +14,7 @@ import java.util.List;
  */
 public interface ExamLogic {
     ExamVO getExamById(long examId);
+    ExamVO getExamByIdAndParticipantId(Long examId, Long userId);
 
     Page<ExamVO> getOrganizerExamList(Long organizerId, Byte type, Integer status, String keyword, Pageable pageable);
 
@@ -40,5 +41,4 @@ public interface ExamLogic {
     boolean updateStatutsForAllTask();
 
     public void clearAllSchedulers();
-
 }

+ 8 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/ExamLogicImpl.java

@@ -17,6 +17,7 @@ import cn.iselab.mooctest.site.web.exception.HttpBadRequestException;
 import cn.iselab.mooctest.site.web.exception.HttpNotFoundException;
 import cn.iselab.mooctest.site.web.logic.BaseLogic;
 import cn.iselab.mooctest.site.web.logic.ExamLogic;
+import org.apache.shiro.authz.UnauthorizedException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.convert.converter.Converter;
 import org.springframework.data.domain.Page;
@@ -87,6 +88,13 @@ public class ExamLogicImpl extends BaseLogic implements ExamLogic {
     }
 
     @Override
+    public ExamVO getExamByIdAndParticipantId(Long examId, Long userId) {
+        Task task = examService.getExamByIdAndParticipantId(examId, userId);
+        ExamVO examVO = examVOWrapper.wrapExamFrom(task);
+        return examVO;
+    }
+
+    @Override
     public Page<ExamVO> getOrganizerExamList(Long organizerId, Byte type, Integer status, String keyword, Pageable pageable) {
         Page<Task> taskPage = examService.getExamsByOrganizerId(organizerId, type, status, keyword, pageable);
         Page<ExamVO> examVOPage = taskPage.map(new Converter<Task, ExamVO>() {