Kaynağa Gözat

指导教师授权

tangss 8 yıl önce
ebeveyn
işleme
f1198dccf2

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

@@ -109,7 +109,7 @@ public class Application {
 
         // To disabled web environment, change `true` to `false`
         application.setWebEnvironment(true);
-        application.addListeners(new ApplicationStartup());
+//        application.addListeners(new ApplicationStartup());
         application.run(args);
     }
 }

+ 2 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/event/StatisEventsListener.java → mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/event/EventsListener.java

@@ -8,7 +8,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 @Component
-public class StatisEventsListener implements InitializingBean {
+public class EventsListener implements InitializingBean {
 
     @Autowired
     private EventUtil eventUtil;
@@ -37,7 +37,7 @@ public class StatisEventsListener implements InitializingBean {
 
     @Subscribe
     public void updateContestMentorPermission(UpdateContestMentorEvent event) throws Exception {
-        instructorService.updateContestMentorPermisson(event.getTeacherEmails());
+        instructorService.updateContestMentorPermission(event.getQualificationId(), event.getTeacherEmails());
     }
 
 }

+ 1 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/event/UpdateContestMentorEvent.java

@@ -13,6 +13,7 @@ import java.util.List;
 @Builder
 @AllArgsConstructor
 public class UpdateContestMentorEvent  implements Event {
+    private Long qualificationId;
     private List<String> teacherEmails;
 
     @Override

+ 9 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/AddOns2QualificationDao.java

@@ -1,7 +1,9 @@
 package cn.iselab.mooctest.site.dao;
 
 import cn.iselab.mooctest.site.models.AddOns2Qualification;
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.CrudRepository;
+import org.springframework.data.repository.query.Param;
 
 import javax.transaction.Transactional;
 import java.util.List;
@@ -14,4 +16,11 @@ public interface AddOns2QualificationDao  extends CrudRepository<AddOns2Qualific
     List<AddOns2Qualification> findByQualificationId(Long qualificationId);
 
     List<AddOns2Qualification> findByQualificationIdAndAddonsType(Long qualificationId, Integer type);
+
+    @Query("select count(aq) from AddOns2Qualification aq, User u , Qualification q " +
+            "where u.id=:userId and u.email=aq.email and q.competitionId=:competitionId and q.id=aq.qualificationId and aq.addonsType=:addonsType")
+    int countByUserIdAndCompetitionIdAndType(@Param("userId")Long userId, @Param("competitionId")Long competitionId, @Param("addonsType")Integer addonsType);
+
+    @Query("select q.competitionId from AddOns2Qualification aq,Qualification q where aq.email=:userEmail and aq.qualificationId=q.id")
+    List<Long> findSupervisedCompetitionId(@Param("userEmail")String userEmail);
 }

+ 4 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Competition2TaskDao.java

@@ -4,10 +4,14 @@ import cn.iselab.mooctest.site.models.Competition2Task;
 import cn.iselab.mooctest.site.models.Task;
 import org.springframework.data.repository.CrudRepository;
 
+import java.util.List;
+
 /**
  * Created by tangshanshan on 2017/11/3.
  */
 public interface Competition2TaskDao extends CrudRepository<Competition2Task, Long> {
     Competition2Task findByCompetitionIdAndIsActive(Long competitionId, Boolean isActive);
     Competition2Task findByCompetitionIdAndIndex(Long competitionId, Integer index);
+
+    List<Competition2Task> findByCompetitionId(Long competitionId);
 }

+ 1 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/CompetitionService.java

@@ -27,7 +27,7 @@ public interface CompetitionService {
      * @param competitionId
      * @return
      */
-    List<Task> getAllTasksOfCompetition(Long competitionId);
+    List<Competition2Task> getAllTasksOfCompetition(Long competitionId);
 
     Qualification getQualification(Long competitionId, Long userId);
 

+ 4 - 3
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/ContestMentorService.java

@@ -1,13 +1,14 @@
 package cn.iselab.mooctest.site.service;
 
+import cn.iselab.mooctest.site.models.User;
+
 import java.util.List;
 
 /**
  * Created by shanshan on 2017/9/15.
  */
 public interface ContestMentorService {
-    void updateContestMentorPermisson(List<String> teacherEmails);
-
-    void checkAndAddContestMentorPermission(List<Long> userIds);
+    void updateContestMentorPermission(Long qualificationId, List<String> teacherEmails);
 
+    void checkAndAddContestMentorPermission(User user);
 }

+ 3 - 3
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/CompetitionServiceImpl.java

@@ -49,8 +49,8 @@ public class CompetitionServiceImpl implements CompetitionService {
     }
 
     @Override
-    public List<Task> getAllTasksOfCompetition(Long competitionId) {
-        return null;
+    public List<Competition2Task> getAllTasksOfCompetition(Long competitionId) {
+        return competition2TaskDao.findByCompetitionId(competitionId);
     }
 
     @Override
@@ -104,7 +104,7 @@ public class CompetitionServiceImpl implements CompetitionService {
         List<String> changedAddons = deletedAddons.stream().map(AddOns2Qualification::getEmail).collect(Collectors.toList());
         changedAddons.addAll(savedAddons.stream().map(AddOns2Qualification::getEmail).collect(Collectors.toList()));
         if(type == AddOns2Qualification.ADDONS_TYPE_TEACHER){
-            eventUtil.post(new UpdateContestMentorEvent(changedAddons));
+            eventUtil.post(new UpdateContestMentorEvent(qualificationId,changedAddons));
         }
         return savedAddons;
     }

+ 32 - 39
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/ContestMentorServiceImpl.java

@@ -1,16 +1,21 @@
 package cn.iselab.mooctest.site.service.impl;
 
-import cn.iselab.mooctest.site.dao.*;
-import cn.iselab.mooctest.site.models.Role;
-import cn.iselab.mooctest.site.models.User2Role;
+import cn.iselab.mooctest.site.dao.AddOns2QualificationDao;
+import cn.iselab.mooctest.site.dao.ExamDao;
+import cn.iselab.mooctest.site.dao.QualificationDao;
+import cn.iselab.mooctest.site.dao.UserDao;
+import cn.iselab.mooctest.site.models.AddOns2Qualification;
+import cn.iselab.mooctest.site.models.Competition2Task;
+import cn.iselab.mooctest.site.models.Qualification;
+import cn.iselab.mooctest.site.models.User;
+import cn.iselab.mooctest.site.service.CompetitionService;
 import cn.iselab.mooctest.site.service.ContestMentorService;
 import cn.iselab.mooctest.site.service.instancePermission.TaskPermissionService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.sql.Timestamp;
-import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * Created by shanshan on 2017/9/15.
@@ -19,53 +24,41 @@ import java.util.List;
 public class ContestMentorServiceImpl implements ContestMentorService {
 
     @Autowired
-    private User2RoleDao user2RoleDao;
-
-    @Autowired
-    private RoleDao roleDao;
-
-    @Autowired
-    private ContestMentorDao contestMentorDao;
+    private AddOns2QualificationDao addOns2QualificationDao;
 
     @Autowired
     private UserDao userDao;
 
     @Autowired
-    private ExamDao examDao;
+    private QualificationDao qualificationDao;
 
     @Autowired
     private TaskPermissionService taskPermissionService;
 
+    @Autowired
+    private CompetitionService competitionService;
+
     @Override
-    public void checkAndAddContestMentorPermission(List<Long> userIds) {
-        Role role = roleDao.findByName("contestMentor");
-        List<User2Role> addUser2Roles = new ArrayList<>();
-        List<User2Role> deleteUser2Roles = new ArrayList<>();
-        userIds.stream().forEach(userid->{
-            if(contestMentorDao.countByTeacherId(userid)>0){
-                List<User2Role> user2Roles = user2RoleDao.findByUserIdAndRoleId(userid, role.getId());
-                if(user2Roles.size()==0){
-                    User2Role user2Role = new User2Role();
-                    user2Role.setRoleId(role.getId());
-                    user2Role.setUserId(userid);
-                    user2Role.setCreateTime(new Timestamp(System.currentTimeMillis()));
-                    addUser2Roles.add(user2Role);
-                    taskPermissionService.grantViewContestPermission(userid);
-                }
-            }else {
-                deleteUser2Roles.addAll(user2RoleDao.findByUserIdAndRoleId(userid,role.getId()));
-                taskPermissionService.revokeViewContestPermission(userid);
-            }
-        });
-        user2RoleDao.save(addUser2Roles);
-        user2RoleDao.delete(deleteUser2Roles);
+    public void updateContestMentorPermission(Long qualificationId, List<String> teacherEmails) {
+        List<Long> teacherIds = userDao.findIdByEmail(teacherEmails);
+        Qualification qualification = qualificationDao.findOne(qualificationId);
+        teacherIds.stream().forEach(teacherId->updateTaskViewPermission(teacherId, qualification.getCompetitionId()));
     }
 
-
     @Override
-    public void updateContestMentorPermisson(List<String> teacherEmails) {
-        List<Long> teacherIds = userDao.findIdByEmail(teacherEmails);
-        checkAndAddContestMentorPermission(teacherIds);
+    public void checkAndAddContestMentorPermission(User user) {
+        List<Long> competitionIds = addOns2QualificationDao.findSupervisedCompetitionId(user.getEmail());
+        competitionIds.stream().forEach(competitionId->updateTaskViewPermission(user.getId(), competitionId));
     }
 
+    private void updateTaskViewPermission(Long userId, Long competitionId) {
+        List<Competition2Task> competition2Tasks = competitionService.getAllTasksOfCompetition(competitionId);
+        List<Long> examIds = competition2Tasks.stream().map(Competition2Task::getTaskId).collect(Collectors.toList());
+
+        if(addOns2QualificationDao.countByUserIdAndCompetitionIdAndType(userId,competitionId, AddOns2Qualification.ADDONS_TYPE_TEACHER)>0){
+            taskPermissionService.grantViewPermission(userId, examIds);
+        }else {
+            taskPermissionService.revokeViewPermission(userId, examIds);
+        }
+    }
 }

+ 2 - 3
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/instancePermission/TaskPermissionService.java

@@ -21,8 +21,7 @@ public interface TaskPermissionService {
 
     List<TaskPermission> getByUserIdAndInstanceId(Long userId, Long instanceId);
 
-    void grantViewContestPermission(Long userId);
-    void revokeViewContestPermission(Long userId);
-
+    void grantViewPermission(Long userId, List<Long> examIds);
 
+    void revokeViewPermission(Long userId, List<Long> examIds);
 }

+ 12 - 12
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/instancePermission/impl/TaskPermissionServiceImpl.java

@@ -83,24 +83,24 @@ public class TaskPermissionServiceImpl extends BaseService implements TaskPermis
     }
 
     @Override
-    public void grantViewContestPermission(Long userId) {
-        List<Long> contestIds = examDao.findContestAndExerciseId(Task.TYPE_CONTEST);
+    public void grantViewPermission(Long userId, List<Long> examIds) {
         List<TaskPermission> permissions = new ArrayList<>();
-        contestIds.stream().forEach(instanceId->{
-            TaskPermission taskPermission = new TaskPermission();
-            taskPermission.setUserId(userId);
-            taskPermission.setInstanceId(instanceId);
-            taskPermission.setOperation("view");
-            taskPermission.setCreateTime(new Timestamp(System.currentTimeMillis()));
-            permissions.add(taskPermission);
+        examIds.stream().forEach(instanceId->{
+            if(taskPermissionDao.findByUserIdAndOperationAndInstanceId(userId,"view",instanceId).size()==0){
+                TaskPermission taskPermission = new TaskPermission();
+                taskPermission.setUserId(userId);
+                taskPermission.setInstanceId(instanceId);
+                taskPermission.setOperation("view");
+                taskPermission.setCreateTime(new Timestamp(System.currentTimeMillis()));
+                permissions.add(taskPermission);
+            }
         });
         taskPermissionDao.save(permissions);
     }
 
     @Override
-    public void revokeViewContestPermission(Long userId) {
-        List<Long> contestIds = examDao.findContestAndExerciseId(Task.TYPE_CONTEST);
-        List<TaskPermission> taskPermissions = taskPermissionDao.findByUserIdAndOperationAndInstanceIdIn(userId,"view", contestIds);
+    public void revokeViewPermission(Long userId, List<Long> examIds) {
+        List<TaskPermission> taskPermissions = taskPermissionDao.findByUserIdAndOperationAndInstanceIdIn(userId,"view", examIds);
         taskPermissionDao.delete(taskPermissions);
     }
 

+ 6 - 6
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/UserLogicImpl.java

@@ -289,10 +289,12 @@ public class UserLogicImpl extends BaseLogic implements UserLogic {
         if (username == null) {
             throw new HttpBadRequestException("empty username");
         }
-        if (userService.findByUsername(username) == null) {
+
+        User user = userService.findByUsername(username);
+        if (user == null) {
             throw new HttpBadRequestException("user not exist");
         }
-        Long userId = userService.findByUsername(username).getId();
+        Long userId = user.getId();
         if (roleService.getRolesOfUser(userId).contains(roleService.getRoleByRoleName("manager"))) {
             throw new HttpBadRequestException("already get the manager role");
         }
@@ -302,10 +304,8 @@ public class UserLogicImpl extends BaseLogic implements UserLogic {
         //set default property for new manager
         managerPropertyService.setDefaultManagerProperty(userId);
 
-        //check contest mentor role
-        List<Long> userIds = new ArrayList<Long>();
-        userIds.add(userId);
-        contestMentorService.checkAndAddContestMentorPermission(userIds);
+        //check contest mentor permission
+        contestMentorService.checkAndAddContestMentorPermission(user);
     }
 
     @Override