Browse Source

日志管理加入数据权限控制

caozixuan 2 years ago
parent
commit
48959734a3

+ 2 - 2
distributed-print/src/main/java/com/qmth/distributed/print/api/BasicOperationLogController.java

@@ -34,13 +34,13 @@ public class BasicOperationLogController {
     @ApiOperation(value = "日志管理-分页查询")
     @RequestMapping(value = "/query", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
-//    @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.SEARCH)
     public Result findOperationLogPage(@ApiParam(value = "操作类型") @RequestParam(required = false) CustomizedOperationTypeEnum customizedOperationType,
                                        @ApiParam(value = "操作时间 - 起始") @RequestParam(required = false) Long startTime,
                                        @ApiParam(value = "操作时间 - 终止") @RequestParam(required = false) Long endTime,
+                                       @ApiParam(value = "操作人姓名") @RequestParam(required = false) String operatorName,
                                        @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                                        @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
-        return ResultUtil.ok(basicOperationLogService.findOperationLogPage(customizedOperationType, startTime, endTime, requestUser, pageNumber, pageSize));
+        return ResultUtil.ok(basicOperationLogService.findOperationLogPage(customizedOperationType, startTime, endTime,operatorName, requestUser, pageNumber, pageSize));
     }
 }

+ 1 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/SysController.java

@@ -239,7 +239,7 @@ public class SysController {
         SysUser sysUser = userList.get(0);
         LoginResult loginResult = teachcloudCommonService.login(login.getPassword(), sysUser, AppSourceEnum.SYSTEM);
         try {
-            basicOperationLogService.saveOperateLogWithNoAuth(sysUser.getSchoolId(), sysUser.getId(), "用户登录", CustomizedOperationTypeEnum.LOGIN, SystemEnum.DISTRIBUTED_PRINT);
+            basicOperationLogService.saveOperateLogWithNoAuth(sysUser.getSchoolId(), sysUser.getOrgId(), sysUser.getId(), "用户登录", CustomizedOperationTypeEnum.LOGIN, SystemEnum.DISTRIBUTED_PRINT);
         } catch (Exception e) {
             log.error(e.getMessage());
         }

+ 1 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/aspect/LogAspect.java

@@ -130,6 +130,7 @@ public class LogAspect {
         operationLog.setUserName(userName);
         operationLog.setIp(ServletUtil.getIP());
         operationLog.setCreateTime(System.currentTimeMillis());
+        operationLog.setOrgId(requestUser.getOrgId());
 
         // 注解中的信息
         OperationLogDetail annotation = signature.getMethod().getAnnotation(OperationLogDetail.class);

+ 12 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/BasicOperationLog.java

@@ -21,6 +21,10 @@ public class BasicOperationLog implements Serializable {
     @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
+    @ApiModelProperty(value = "机构id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long orgId;
+
     @ApiModelProperty(value = "学校id")
     @JsonSerialize(using = ToStringSerializer.class)
     private Long schoolId;
@@ -87,6 +91,14 @@ public class BasicOperationLog implements Serializable {
         this.id = id;
     }
 
+    public Long getOrgId() {
+        return orgId;
+    }
+
+    public void setOrgId(Long orgId) {
+        this.orgId = orgId;
+    }
+
     public Long getSchoolId() {
         return schoolId;
     }

+ 6 - 3
teachcloud-common/src/main/java/com/qmth/teachcloud/common/mapper/BasicOperationLogMapper.java

@@ -3,6 +3,7 @@ package com.qmth.teachcloud.common.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import com.qmth.teachcloud.common.bean.result.BasicMajorResult;
 import com.qmth.teachcloud.common.bean.result.BasicOperationLogResult;
 import com.qmth.teachcloud.common.entity.BasicOperationLog;
@@ -21,16 +22,18 @@ public interface BasicOperationLogMapper extends BaseMapper<BasicOperationLog> {
      *
      * @param iPage                   分页参数
      * @param schoolId                学校id
-     * @param userId                用户id
      * @param customizedOperationType 自定义操作类型
      * @param startTime               创建开始时间
      * @param endTime                 创建截止时间
+     * @param operatorName            操作人名称
+     * @param dpr                     数据权限
      * @return 分页结果
      */
     IPage<BasicOperationLogResult> findOperationLogPage(@Param("iPage") Page<BasicMajorResult> iPage,
                                                         @Param("schoolId") Long schoolId,
-                                                        @Param("userId") Long userId,
                                                         @Param("customizedOperationType") CustomizedOperationTypeEnum customizedOperationType,
                                                         @Param("startTime") Long startTime,
-                                                        @Param("endTime") Long endTime);
+                                                        @Param("endTime") Long endTime,
+                                                        @Param("operatorName") String operatorName,
+                                                        @Param("dpr") DataPermissionRule dpr);
 }

+ 3 - 2
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/BasicOperationLogService.java

@@ -22,12 +22,13 @@ public interface BasicOperationLogService extends IService<BasicOperationLog> {
      * @param customizedOperationType 自定义日志操作类型
      * @param startTime               创建时间 - 开始
      * @param endTime                 创建时间 - 截止
+     * @param operatorName            操作人姓名
      * @param requestUser             请求用户
      * @param pageNumber              分页页数
      * @param pageSize                分页容量
      * @return 分页结果
      */
-    IPage<BasicOperationLogResult> findOperationLogPage(CustomizedOperationTypeEnum customizedOperationType, Long startTime, Long endTime, SysUser requestUser, int pageNumber, int pageSize);
+    IPage<BasicOperationLogResult> findOperationLogPage(CustomizedOperationTypeEnum customizedOperationType, Long startTime, Long endTime, String operatorName, SysUser requestUser, int pageNumber, int pageSize);
 
-    void saveOperateLogWithNoAuth(Long schoolId,Long userId, String detail, CustomizedOperationTypeEnum customizedOperationType, SystemEnum systemType);
+    void saveOperateLogWithNoAuth(Long schoolId, Long orgId, Long userId, String detail, CustomizedOperationTypeEnum customizedOperationType, SystemEnum systemType);
 }

+ 12 - 4
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicOperationLogServiceImpl.java

@@ -3,6 +3,7 @@ package com.qmth.teachcloud.common.service.impl;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import com.qmth.teachcloud.common.bean.result.BasicOperationLogResult;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.BasicOperationLog;
@@ -11,6 +12,7 @@ import com.qmth.teachcloud.common.enums.log.CustomizedOperationTypeEnum;
 import com.qmth.teachcloud.common.enums.log.SystemEnum;
 import com.qmth.teachcloud.common.mapper.BasicOperationLogMapper;
 import com.qmth.teachcloud.common.service.BasicOperationLogService;
+import com.qmth.teachcloud.common.service.BasicRoleDataPermissionService;
 import com.qmth.teachcloud.common.service.SysUserService;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import org.springframework.stereotype.Service;
@@ -28,16 +30,21 @@ import java.util.Objects;
 public class BasicOperationLogServiceImpl extends ServiceImpl<BasicOperationLogMapper, BasicOperationLog> implements BasicOperationLogService {
     @Resource
     private SysUserService sysUserService;
+    @Resource
+    private BasicRoleDataPermissionService basicRoleDataPermissionService;
 
     @Override
-    public IPage<BasicOperationLogResult> findOperationLogPage(CustomizedOperationTypeEnum customizedOperationType, Long startTime, Long endTime, SysUser requestUser, int pageNumber, int pageSize) {
+    public IPage<BasicOperationLogResult> findOperationLogPage(CustomizedOperationTypeEnum customizedOperationType, Long startTime, Long endTime, String operatorName, SysUser requestUser, int pageNumber, int pageSize) {
         Long schoolId = requestUser.getSchoolId();
-        Long userId = requestUser.getId();
-        return this.baseMapper.findOperationLogPage(new Page<>(pageNumber, pageSize), schoolId, userId, customizedOperationType, startTime, endTime);
+        if (SystemConstant.strNotNull(operatorName)) {
+            operatorName = SystemConstant.translateSpecificSign(operatorName);
+        }
+        DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(schoolId, requestUser.getId(), ServletUtil.getRequest().getServletPath());
+        return this.baseMapper.findOperationLogPage(new Page<>(pageNumber, pageSize), schoolId, customizedOperationType, startTime, endTime, operatorName, dpr);
     }
 
     @Override
-    public void saveOperateLogWithNoAuth(Long schoolId, Long userId, String detail, CustomizedOperationTypeEnum customizedOperationType, SystemEnum systemType) {
+    public void saveOperateLogWithNoAuth(Long schoolId, Long orgId, Long userId, String detail, CustomizedOperationTypeEnum customizedOperationType, SystemEnum systemType) {
         HttpServletRequest request = ServletUtil.getRequest();
         BasicOperationLog operationLog = new BasicOperationLog();
         operationLog.setId(SystemConstant.getDbUuid());
@@ -45,6 +52,7 @@ public class BasicOperationLogServiceImpl extends ServiceImpl<BasicOperationLogM
         operationLog.setSchoolId(schoolId);
         operationLog.setUrl(request.getServletPath());
         operationLog.setUserId(userId);
+        operationLog.setOrgId(orgId);
         operationLog.setCustomizedOperationType(customizedOperationType);
 
         SysUser requestUser = sysUserService.getById(userId);

+ 14 - 3
teachcloud-common/src/main/resources/mapper/BasicOperationLogMapper.xml

@@ -18,9 +18,6 @@
             <if test="schoolId != null">
                 AND school_id = #{schoolId}
             </if>
-            <if test="userId != null">
-                AND user_id = #{userId}
-            </if>
             <if test="customizedOperationType != null">
                 AND customized_operation_type = #{customizedOperationType}
             </if>
@@ -30,6 +27,20 @@
             <if test="endTime != null">
                 AND #{endTime} >= endTime
             </if>
+            <if test="operatorName != null and operatorName != ''">
+                AND user_name LIKE CONCAT('%',#{operatorName},'%')
+            </if>
+            <if test="dpr != null">
+                <if test="dpr.requestUserId != null">
+                    AND user_id = #{dpr.requestUserId}
+                </if>
+                <if test="dpr.orgIdSet != null and dpr.orgIdSet != '' and dpr.orgIdSet.size > 0">
+                    AND org_id IN
+                    <foreach collection="dpr.orgIdSet" item="item" index="index" open="(" separator="," close=")">
+                        #{item}
+                    </foreach>
+                </if>
+            </if>
         </where>
         ORDER BY create_time DESC
     </select>