提交 c24633d6 编写于 作者: F fit2-zhao 提交者: fit2-zhao

fix(系统设置): 操作日志及操作历史问题修复

上级 7332c7e5
......@@ -64,7 +64,7 @@ public class OrganizationController {
}
@PostMapping("/member/update")
@MsAuditLog(module = "organization_member", type = OperLogConstants.UPDATE, content = "#msClass.getLogDetails(#memberDTO)", msClass = OrganizationService.class)
@MsAuditLog(module = "organization_member", type = OperLogConstants.UPDATE,beforeEvent = "#msClass.getLogDetails(#memberDTO)", content = "#msClass.getLogDetails(#memberDTO)", msClass = OrganizationService.class)
public void updateOrgMember(@RequestBody OrganizationMemberDTO memberDTO) {
organizationService.updateOrgMember(memberDTO);
}
......
......@@ -6,7 +6,6 @@ import io.metersphere.api.service.ApiTestEnvironmentService;
import io.metersphere.base.domain.FileMetadata;
import io.metersphere.base.domain.Project;
import io.metersphere.commons.constants.OperLogConstants;
import io.metersphere.commons.constants.RoleConstants;
import io.metersphere.commons.utils.PageUtils;
import io.metersphere.commons.utils.Pager;
import io.metersphere.commons.utils.SessionUtils;
......@@ -17,8 +16,6 @@ import io.metersphere.dto.WorkspaceMemberDTO;
import io.metersphere.log.annotation.MsAuditLog;
import io.metersphere.service.CheckPermissionService;
import io.metersphere.service.ProjectService;
import org.apache.shiro.authz.annotation.Logical;
import org.apache.shiro.authz.annotation.RequiresRoles;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
......@@ -92,6 +89,7 @@ public class ProjectController {
/**
* 切换项目
*
* @param request
* @return
*/
......@@ -116,13 +114,13 @@ public class ProjectController {
}
@PostMapping(value = "upload/files/{projectId}", consumes = {"multipart/form-data"})
@MsAuditLog(module = "project_file_management", type = OperLogConstants.IMPORT, content = "#msClass.getLogDetails(#projectId)", msClass = ProjectService.class)
@MsAuditLog(module = "project_file_management", type = OperLogConstants.IMPORT, content = "#msClass.getLogDetails(#projectId)", msClass = ProjectService.class)
public List<FileMetadata> uploadFiles(@PathVariable String projectId, @RequestPart(value = "file") List<MultipartFile> files) {
return projectService.uploadFiles(projectId, files);
}
@PostMapping(value = "/update/file/{fileId}", consumes = {"multipart/form-data"})
@MsAuditLog(module = "project_file_management", type = OperLogConstants.IMPORT, content = "#msClass.getLogDetails(#fileId)", msClass = ProjectService.class)
@MsAuditLog(module = "project_file_management", type = OperLogConstants.IMPORT, content = "#msClass.getLogDetails(#fileId)", msClass = ProjectService.class)
public FileMetadata updateFile(@PathVariable String fileId, @RequestPart(value = "file") MultipartFile file) {
return projectService.updateFile(fileId, file);
}
......@@ -134,7 +132,7 @@ public class ProjectController {
}
@PostMapping("/member/update")
// @MsAuditLog(module = "workspace_member", type = OperLogConstants.UPDATE, title = "#memberDTO.name")
@MsAuditLog(module = "project_project_member", type = OperLogConstants.UPDATE, beforeEvent = "#msClass.getLogDetails(#memberDTO)", content = "#msClass.getLogDetails(#memberDTO)", msClass = ProjectService.class)
public void updateMember(@RequestBody WorkspaceMemberDTO memberDTO) {
projectService.updateMember(memberDTO);
}
......
......@@ -29,7 +29,7 @@ public class TestCaseReference {
testCaseColumns.put("expectedResult", "预期结果");
testCaseColumns.put("demandName", "关联需求");
testCaseColumns.put("comment", "评论");
testCaseColumns.put("ms-dff-col", "tags");
testCaseColumns.put("ms-dff-col", "tags,steps");
}
}
\ No newline at end of file
......@@ -34,9 +34,9 @@ public class TestPlanReference {
issuesColumns.put("platform","平台");
issuesColumns.put("creator","创建人");
issuesColumns.put("reporter","处理人");
issuesColumns.put("custom_fields","自定义字段");
issuesColumns.put("customFields","自定义字段");
// 深度处理字段
issuesColumns.put("ms-dff-col", "custom_fields");
issuesColumns.put("ms-dff-col", "customFields");
}
}
\ No newline at end of file
......@@ -6,13 +6,15 @@ import io.metersphere.base.mapper.*;
import io.metersphere.base.mapper.ext.ExtOrganizationMapper;
import io.metersphere.base.mapper.ext.ExtUserGroupMapper;
import io.metersphere.base.mapper.ext.ExtUserRoleMapper;
import io.metersphere.commons.constants.RoleConstants;
import io.metersphere.commons.constants.UserGroupType;
import io.metersphere.commons.exception.MSException;
import io.metersphere.commons.user.SessionUser;
import io.metersphere.commons.utils.SessionUtils;
import io.metersphere.controller.request.OrganizationRequest;
import io.metersphere.dto.*;
import io.metersphere.dto.OrganizationMemberDTO;
import io.metersphere.dto.OrganizationResource;
import io.metersphere.dto.UserDTO;
import io.metersphere.dto.UserGroupHelpDTO;
import io.metersphere.i18n.Translator;
import io.metersphere.log.utils.ReflexObjectUtil;
import io.metersphere.log.vo.DetailColumn;
......@@ -259,12 +261,15 @@ public class OrganizationService {
String orgId = memberDTO.getOrganizationId();
String userId = memberDTO.getId();
// 已有角色
List<Role> memberRoles = extUserRoleMapper.getOrganizationMemberRoles(orgId, userId);
List<Group> memberGroups = extUserGroupMapper.getOrganizationMemberGroups(orgId, userId);
Organization user = organizationMapper.selectByPrimaryKey(orgId);
if (user != null) {
List<String> names = memberRoles.stream().map(Role::getName).collect(Collectors.toList());
List<String> ids = memberRoles.stream().map(Role::getId).collect(Collectors.toList());
OperatingLogDetails details = new OperatingLogDetails(JSON.toJSONString(ids), null, "用户 " + userId + " 修改角色为:" + String.join(",", names), user.getCreateUser(), null);
List<String> names = memberGroups.stream().map(Group::getName).collect(Collectors.toList());
List<String> ids = memberGroups.stream().map(Group::getId).collect(Collectors.toList());
List<DetailColumn> columns = ReflexObjectUtil.getColumns(user, SystemReference.organizationColumns);
DetailColumn column = new DetailColumn("成员角色", "userRoles", String.join(",", names), null);
columns.add(column);
OperatingLogDetails details = new OperatingLogDetails(JSON.toJSONString(ids), null, "用户 " + userId + " 修改角色为:" + String.join(",", names), user.getCreateUser(), columns);
return JSON.toJSONString(details);
}
return null;
......
......@@ -38,6 +38,7 @@ import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
......@@ -237,7 +238,7 @@ public class ProjectService {
return projectMapper.selectByPrimaryKey(id);
}
public boolean useCustomNum(String projectId){
public boolean useCustomNum(String projectId) {
Project project = this.getProjectById(projectId);
if (project != null) {
Boolean customNum = project.getCustomNum();
......@@ -378,6 +379,21 @@ public class ProjectService {
}
}
public String getLogDetails(WorkspaceMemberDTO memberDTO) {
String userId = memberDTO.getId();
// 已有角色
List<DetailColumn> columns = new LinkedList<>();
// 已有角色
List<Group> memberGroups = extUserGroupMapper.getProjectMemberGroups(memberDTO.getProjectId(), userId);
List<String> names = memberGroups.stream().map(Group::getName).collect(Collectors.toList());
List<String> ids = memberGroups.stream().map(Group::getId).collect(Collectors.toList());
DetailColumn column = new DetailColumn("成员角色", "userRoles", String.join(",", names), null);
columns.add(column);
OperatingLogDetails details = new OperatingLogDetails(JSON.toJSONString(ids), memberDTO.getProjectId(), "用户 " + userId + " 修改角色为:" + String.join(",", names), null, columns);
return JSON.toJSONString(details);
}
public Integer checkSourceRole(String workspaceId, String userId, String roleId) {
return extOrganizationMapper.checkSourceRole(workspaceId, userId, roleId);
}
......
package io.metersphere.service;
import io.metersphere.base.domain.Role;
import io.metersphere.base.domain.UserRole;
import io.metersphere.base.domain.UserRoleExample;
import io.metersphere.base.domain.*;
import io.metersphere.base.mapper.UserGroupMapper;
import io.metersphere.base.mapper.UserRoleMapper;
import io.metersphere.base.mapper.ext.ExtUserRoleMapper;
import org.apache.commons.lang3.StringUtils;
......@@ -24,6 +23,8 @@ public class UserRoleService {
private ExtUserRoleMapper extUserRoleMapper;
@Resource
private UserRoleMapper userRoleMapper;
@Resource
private UserGroupMapper userGroupMapper;
public List<Role> getOrganizationMemberRoles(String orgId, String userId) {
return extUserRoleMapper.getOrganizationMemberRoles(orgId, userId);
......@@ -57,4 +58,28 @@ public class UserRoleService {
}
return list;
}
public List<Map<String, Object>> getUserGroup(String userId) {
List<Map<String, Object>> list = new ArrayList<>();
UserGroupExample userRoleExample = new UserGroupExample();
userRoleExample.createCriteria().andUserIdEqualTo(userId);
List<UserGroup> userRoles = userGroupMapper.selectByExample(userRoleExample);
List<String> collect = userRoles.stream()
.map(userRole -> userRole.getGroupId())
.distinct()
.collect(Collectors.toList());
for (int i = 0; i < collect.size(); i++) {
Map<String, Object> map = new HashMap<>(2);
map.put("id", collect.get(i));
map.put("ids", new ArrayList<>());
for (int j = 0; j < userRoles.size(); j++) {
String role = userRoles.get(j).getGroupId();
if (StringUtils.equals(role, collect.get(i))) {
List ids = (List) map.get("ids");
ids.add(userRoles.get(j).getSourceId());
}
}
list.add(map);
}
return list;
}
}
......@@ -503,7 +503,7 @@ public class UserService {
ProjectExample projectExample = new ProjectExample();
projectExample.createCriteria().andWorkspaceIdEqualTo(workspaceId);
List<Project> projects = projectMapper.selectByExample(projectExample);
UserGroupExample userGroupExample = new UserGroupExample();
userGroupExample.createCriteria().andUserIdEqualTo(useId);
List<UserGroup> userGroups = userGroupMapper.selectByExample(userGroupExample);
......@@ -1086,7 +1086,7 @@ public class UserService {
}
private String getRoles(String userId) {
List<Map<String, Object>> maps = userRoleService.getUserRole(userId);
List<Map<String, Object>> maps = userRoleService.getUserGroup(userId);
List<String> colNames = new LinkedList<>();
if (CollectionUtils.isNotEmpty(maps)) {
for (Map<String, Object> map : maps) {
......@@ -1105,25 +1105,9 @@ public class UserService {
names = workspaces.stream().map(Workspace::getName).collect(Collectors.toList());
}
StringBuilder nameBuff = new StringBuilder();
switch (id) {
case "org_member":
nameBuff.append("组织成员:").append(names);
break;
case "org_admin":
nameBuff.append("组织管理员:").append(names);
break;
case "test_manager":
nameBuff.append("测试管理员:").append(names);
break;
case "test_viewer":
nameBuff.append("只读用户:").append(names);
break;
case "admin":
nameBuff.append("系统管理员");
break;
case "test_user":
nameBuff.append("测试成员:").append(names);
break;
Group group = groupMapper.selectByPrimaryKey(id);
if (group != null && CollectionUtils.isNotEmpty(names)) {
nameBuff.append(group.getName()).append(names);
}
colNames.add(nameBuff.toString());
}
......@@ -1149,6 +1133,15 @@ public class UserService {
User user = userMapper.selectByPrimaryKey(request.getId());
if (user != null) {
List<DetailColumn> columns = ReflexObjectUtil.getColumns(user, SystemReference.userColumns);
for (DetailColumn column : columns) {
if (column.getColumnName().equals("status") && column.getOriginalValue() != null && StringUtils.isNotEmpty(column.getOriginalValue().toString())) {
if (column.getOriginalValue().equals("0")) {
column.setOriginalValue("未激活");
} else {
column.setOriginalValue("已激活");
}
}
}
DetailColumn detailColumn = new DetailColumn();
detailColumn.setId(UUID.randomUUID().toString());
detailColumn.setColumnTitle("角色权限");
......
......@@ -7,12 +7,9 @@ import io.metersphere.base.mapper.ext.ExtOrganizationMapper;
import io.metersphere.base.mapper.ext.ExtUserGroupMapper;
import io.metersphere.base.mapper.ext.ExtUserRoleMapper;
import io.metersphere.base.mapper.ext.ExtWorkspaceMapper;
import io.metersphere.commons.constants.RoleConstants;
import io.metersphere.commons.exception.MSException;
import io.metersphere.commons.user.SessionUser;
import io.metersphere.commons.utils.SessionUtils;
import io.metersphere.controller.request.WorkspaceRequest;
import io.metersphere.dto.UserDTO;
import io.metersphere.dto.UserRoleHelpDTO;
import io.metersphere.dto.WorkspaceDTO;
import io.metersphere.dto.WorkspaceMemberDTO;
......@@ -28,6 +25,7 @@ import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
......@@ -44,7 +42,7 @@ public class WorkspaceService {
@Resource
private UserRoleMapper userRoleMapper;
@Resource
private UserMapper userMapper;
private GroupMapper groupMapper;
@Resource
private ExtOrganizationMapper extOrganizationMapper;
@Resource
......@@ -320,10 +318,26 @@ public class WorkspaceService {
Workspace user = workspaceMapper.selectByPrimaryKey(workspaceId);
if (user != null) {
// 已有角色
List<Role> memberRoles = extUserRoleMapper.getWorkspaceMemberRoles(workspaceId, userId);
List<String> names = memberRoles.stream().map(Role::getName).collect(Collectors.toList());
List<String> ids = memberRoles.stream().map(Role::getId).collect(Collectors.toList());
OperatingLogDetails details = new OperatingLogDetails(JSON.toJSONString(ids), null, "用户 " + userId + " 修改角色为:" + String.join(",", names), user.getCreateUser(), null);
List<String> names = new LinkedList<>();
List<String> ids = new LinkedList<>();
List<DetailColumn> columns = ReflexObjectUtil.getColumns(user, SystemReference.organizationColumns);
UserGroupExample example = new UserGroupExample();
example.createCriteria().andSourceIdEqualTo(workspaceId).andUserIdEqualTo(userId);
List<UserGroup> memberRoles = userGroupMapper.selectByExample(example);
if (!CollectionUtils.isEmpty(memberRoles)) {
List<String> groupIds = memberRoles.stream().map(UserGroup::getGroupId).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(groupIds)) {
GroupExample groupExample = new GroupExample();
groupExample.createCriteria().andIdIn(groupIds);
List<Group> groups = groupMapper.selectByExample(groupExample);
names = groups.stream().map(Group::getName).collect(Collectors.toList());
ids = groups.stream().map(Group::getId).collect(Collectors.toList());
}
}
DetailColumn column = new DetailColumn("成员角色", "userRoles", String.join(",", names), null);
columns.add(column);
OperatingLogDetails details = new OperatingLogDetails(JSON.toJSONString(ids), null, "用户 " + userId + " 修改角色为:" + String.join(",", names), user.getCreateUser(), columns);
return JSON.toJSONString(details);
}
return null;
......
......@@ -245,6 +245,7 @@ system_quota_management=System Quota management
system_authorization_management=System authorization management
organization_member=Organization member
organization_workspace=Organization workspace
project_project_member=Project member
organization_service_integration=Organization service integration
organization_message_settings=Organization message settings
workspace_member=Workspace member
......
......@@ -249,6 +249,7 @@ organization_message_settings=组织-消息设置
workspace_member=工作空间-成员
workspace_template_settings=工作空间-模版设置
project_project_manager=项目-项目管理
project_project_member=项目-成员
project_project_jar=項目-JAR包管理
project_environment_setting=项目-环境设置
project_file_management=项目-文件管理
......
......@@ -250,6 +250,7 @@ organization_message_settings=組織-消息設置
workspace_member=工作空間-成員
workspace_template_settings=工作空間-模版設置
project_project_manager=項目-項目管理
project_project_member=項目-成員
project_project_jar=項目-JAR包管理
project_environment_setting=項目-環境設置
project_file_management=項目-文件管理
......
......@@ -22,12 +22,14 @@
<el-row>
<el-col :span="12">
<div style="width: 400px;overflow: auto">
<pre>{{ detail.originalValue }}</pre>
<pre v-if="formatData.indexOf(detail.columnName)!==-1">{{ detail.originalValue }}</pre>
<div v-else>{{ detail.originalValue }}</div>
</div>
</el-col>
<el-col :span="12">
<div style="width: 400px;overflow: auto">
<pre>{{ detail.newValue }}</pre>
<pre v-if="formatData.indexOf(detail.columnName)!==-1">{{ detail.newValue }}</pre>
<div v-else>{{ detail.newValue }}</div>
</div>
</el-col>
</el-row>
......@@ -47,6 +49,7 @@
return {
infoVisible: false,
detail: {},
formatData:["loadConfiguration","advancedConfiguration","config","variables","tags","customFields","steps","scenarioDefinition","request","response"],
}
},
methods: {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册