瀏覽代碼

重构权限系统,增加日志

宋悦 8 年之前
父節點
當前提交
cb31f5243f

+ 10 - 2
core-api/src/main/java/cn/com/qmth/examcloud/service/core/api/StudentApi.java

@@ -54,7 +54,11 @@ public class StudentApi {
                                         @PathVariable Integer pageSize){
         AccessUser accessUser = (AccessUser) request.getAttribute("accessUser");
         if(accessUser != null){
-            studentCriteria.setOrgId(accessUser.getRootOrgId());
+            if(accessUser.getRootOrgId() == accessUser.getOrgId()){
+                studentCriteria.setRootOrgId(accessUser.getRootOrgId());
+            }else{
+                studentCriteria.setOrgId(accessUser.getOrgId());
+            }
         }
         return new ResponseEntity(studentService.getAllStudent(studentCriteria,new PageRequest(curPage,pageSize)),HttpStatus.OK);
     }
@@ -65,7 +69,11 @@ public class StudentApi {
                                         @ModelAttribute Student studentCriteria){
         AccessUser accessUser = (AccessUser) request.getAttribute("accessUser");
         if(accessUser != null){
-            studentCriteria.setOrgId(accessUser.getRootOrgId());
+            if(accessUser.getRootOrgId() == accessUser.getOrgId()){
+                studentCriteria.setRootOrgId(accessUser.getRootOrgId());
+            }else{
+                studentCriteria.setOrgId(accessUser.getOrgId());
+            }
         }
         return new ResponseEntity(studentService.getAllStudent(studentCriteria),HttpStatus.OK);
     }

+ 2 - 1
core-api/src/main/java/cn/com/qmth/examcloud/service/core/service/StudentService.java

@@ -121,7 +121,8 @@ public class StudentService {
                 entity.setUpdateTime(new Date());
                 return studentRepo.save(entity);
             }
-            student.setOrgId(student.getUser().getRootOrgId());
+            student.setOrgId(student.getUser().getOrgId());
+            student.setRootOrgId(student.getUser().getRootOrgId());
             //新建用户和学生
             User user = new User(student.getName(), UserScope.ORG, student.getUser().getRootOrgId(), student.getUser().getOrgId(), UserType.STUDENT);
             user.setEnable(student.getUser().getEnable() == null ? true : student.getUser().getEnable());

+ 33 - 14
core-api/src/main/java/cn/com/qmth/examcloud/service/core/service/UserService.java

@@ -9,6 +9,10 @@ import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 
+import cn.com.qmth.examcloud.common.uac.AccessUserOps;
+import cn.com.qmth.examcloud.common.uac.AccessUserOpsForRedis;
+import cn.com.qmth.examcloud.service.core.entity.*;
+import cn.com.qmth.examcloud.service.core.repo.*;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Example;
@@ -22,19 +26,9 @@ import cn.com.qmth.examcloud.common.uac.AccessCtrlUtil;
 import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
 import cn.com.qmth.examcloud.common.uac.enums.RoleMeta;
 import cn.com.qmth.examcloud.service.core.dto.UserInfo;
-import cn.com.qmth.examcloud.service.core.entity.Org;
-import cn.com.qmth.examcloud.service.core.entity.Student;
-import cn.com.qmth.examcloud.service.core.entity.User;
-import cn.com.qmth.examcloud.service.core.entity.UserLogin;
-import cn.com.qmth.examcloud.service.core.entity.UserRole;
 import cn.com.qmth.examcloud.service.core.enums.UserScope;
 import cn.com.qmth.examcloud.service.core.enums.UserType;
 import cn.com.qmth.examcloud.service.core.params.UserParam;
-import cn.com.qmth.examcloud.service.core.repo.OrgRepo;
-import cn.com.qmth.examcloud.service.core.repo.StudentRepo;
-import cn.com.qmth.examcloud.service.core.repo.UserLoginRepo;
-import cn.com.qmth.examcloud.service.core.repo.UserRepo;
-import cn.com.qmth.examcloud.service.core.repo.UserRoleRepo;
 
 /**
  * 用户服务类
@@ -59,8 +53,18 @@ public class UserService {
     UserLoginRepo userLoginRepo;
 
     @Autowired
+    UserOpsLogRepo userOpsLogRepo;
+
     RedisTemplate redisTemplate;
 
+    AccessUserOps accessUserOps;
+
+    @Autowired
+    public UserService(RedisTemplate redisTemplate){
+        this.redisTemplate = redisTemplate;
+        this.accessUserOps = new AccessUserOpsForRedis(redisTemplate);
+    }
+
     public Page<User> findAll(User userCriteria, Pageable pageable){
         ExampleMatcher exampleMatcher = ExampleMatcher.matching()
                 .withMatcher("name", contains())
@@ -136,8 +140,9 @@ public class UserService {
         }else if(!user.getEnable()){
             throw new RuntimeException("该用户被禁用");
         }else{
-            initUserLogin(user);
             String token = AccessCtrlUtil.buildToken();
+            initUserLogin(user);
+            createUserOpsLog(user,"登录");
             createAccessUser(token,user,null);
             createUserLogin(token,user);
             return getUserInfo(user,token);
@@ -152,11 +157,21 @@ public class UserService {
         //判断是否已登录,若已登录则强制已登录用户退出
         UserLogin userLogin= userLoginRepo.findFirstByUserId(user.getId());
         if(userLogin != null){
-            redisTemplate.delete(userLogin.getToken());
+            accessUserOps.delete(userLogin.getToken());
             userLoginRepo.deleteByUserId(userLogin.getUserId());
         }
     }
 
+    /**
+     * 创建用户操作日志
+     * @param user
+     * @param action
+     */
+    public void createUserOpsLog(User user,String action){
+        UserOpsLog userOpsLog = new UserOpsLog(action,user.getId(),user.getName(),new Date());
+        userOpsLogRepo.save(userOpsLog);
+    }
+
     /**
      * 创建用户登录记录
      * @param token
@@ -189,7 +204,7 @@ public class UserService {
         accessUser.setRoles(rolesMap);
         accessUser.setToken(token);
         accessUser.setStudentId(studentId);
-        redisTemplate.opsForValue().set(token,accessUser);
+        accessUserOps.set(token,accessUser);
     }
 
     /**
@@ -241,8 +256,12 @@ public class UserService {
      * @param accessUser
      */
 	public void logout(AccessUser accessUser) {
-		redisTemplate.delete(accessUser.getToken());
+        accessUserOps.delete(accessUser.getToken());
         userLoginRepo.deleteByUserId(accessUser.getUserId());
+        User user = new User();
+        user.setId(accessUser.getUserId());
+        user.setName(accessUser.getName());
+        createUserOpsLog(user,"退出");
 	}
 
 	public List<User> getMarker(Long rootOrgId) {

+ 10 - 0
core-domain/src/main/java/cn/com/qmth/examcloud/service/core/entity/Student.java

@@ -48,6 +48,8 @@ public class Student implements Serializable {
 
 	private Long orgId;
 
+	private Long rootOrgId;
+
 	public static long getSerialVersionUID() {
 		return serialVersionUID;
 	}
@@ -140,6 +142,14 @@ public class Student implements Serializable {
 		this.orgId = orgId;
 	}
 
+	public Long getRootOrgId() {
+		return rootOrgId;
+	}
+
+	public void setRootOrgId(Long rootOrgId) {
+		this.rootOrgId = rootOrgId;
+	}
+
 	public Student() {
 	}
 }

+ 76 - 0
core-domain/src/main/java/cn/com/qmth/examcloud/service/core/entity/UserOpsLog.java

@@ -0,0 +1,76 @@
+package cn.com.qmth.examcloud.service.core.entity;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * Created by songyue on 17/6/20.
+ */
+@Entity
+@Table(name = "ecs_core_user_log")
+public class UserOpsLog implements Serializable{
+    private static final long serialVersionUID = -2147663545069026711L;
+
+    @Id
+    @GeneratedValue
+    private Long id;
+
+    private String action;
+
+    private Long userId;
+
+    private String userName;
+
+    private Date createTime;
+
+    public UserOpsLog(String action, Long userId, String userName, Date createTime) {
+        this.action = action;
+        this.userId = userId;
+        this.userName = userName;
+        this.createTime = createTime;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getAction() {
+        return action;
+    }
+
+    public void setAction(String action) {
+        this.action = action;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+}

+ 11 - 0
core-domain/src/main/java/cn/com/qmth/examcloud/service/core/repo/UserOpsLogRepo.java

@@ -0,0 +1,11 @@
+package cn.com.qmth.examcloud.service.core.repo;
+
+import cn.com.qmth.examcloud.service.core.entity.UserOpsLog;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.repository.query.QueryByExampleExecutor;
+
+/**
+ * Created by songyue on 17/2/22.
+ */
+public interface UserOpsLogRepo extends JpaRepository<UserOpsLog,Long>,QueryByExampleExecutor<UserOpsLog> {
+}