|
|
@@ -162,6 +162,16 @@ public class WorkKnowledgeBaseShareController extends BaseController {
|
|
|
model.addAttribute("rootId", rootId);
|
|
|
model.addAttribute("isAdmin", isAdmin);
|
|
|
model.addAttribute("isExpert", isExpert);
|
|
|
+
|
|
|
+ // 判断当前进入的根节点是否为"公司内部发文"(parent_id=0),用于前端按钮展示
|
|
|
+ boolean isInternalDocRootNode = false;
|
|
|
+ if (StringUtils.isNotBlank(rootId)) {
|
|
|
+ WorkKnowledgeBaseTreeInfo rootTreeInfo = shareService.getTreeInfoById(rootId);
|
|
|
+ if (rootTreeInfo != null && "公司内部发文".equals(rootTreeInfo.getTreeName()) && "0".equals(rootTreeInfo.getParentId())) {
|
|
|
+ isInternalDocRootNode = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ model.addAttribute("isInternalDocRootNode", isInternalDocRootNode);
|
|
|
return "modules/WorkKnowledgeBase/workKnowledgeBaseShareList";
|
|
|
}
|
|
|
|
|
|
@@ -374,9 +384,26 @@ public class WorkKnowledgeBaseShareController extends BaseController {
|
|
|
return "redirect:" + Global.getAdminPath() + "/workKnowledgeBase/share/list";
|
|
|
}
|
|
|
if (auditStatus != null && auditStatus.equals(WorkKnowledgeBaseShareService.AUDIT_STATUS_PASSED)) {
|
|
|
- // 审核通过仅管理员可编辑
|
|
|
- if (!UserUtils.getUser().isAdmin() && !UserUtils.isManager()) {
|
|
|
- addMessage(redirectAttributes, "审核通过的数据仅管理员可编辑");
|
|
|
+ // 审核通过仅管理员/经理可编辑,公司内部发文根节点下的数据发起人也可编辑
|
|
|
+ boolean isInternalDoc = isInternalDocByTreeNodeId(shareInfo.getTreeNodeId());
|
|
|
+ boolean canEdit = false;
|
|
|
+ if (UserUtils.getUser().isAdmin() || UserUtils.isManager()) {
|
|
|
+ canEdit = true;
|
|
|
+ } else if (isInternalDoc) {
|
|
|
+ // 公司内部发文:发起人和管理员可编辑
|
|
|
+ WorkKnowledgeBaseShareInfo existRecord = shareService.get(shareInfo.getId());
|
|
|
+ if (existRecord != null) {
|
|
|
+ String currentUserId = UserUtils.getUser().getId();
|
|
|
+ String submitUserId = existRecord.getSubmitAuditUserId();
|
|
|
+ if (StringUtils.isNotBlank(submitUserId)) {
|
|
|
+ canEdit = currentUserId.equals(submitUserId);
|
|
|
+ } else if (existRecord.getCreateBy() != null) {
|
|
|
+ canEdit = currentUserId.equals(existRecord.getCreateBy().getId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!canEdit) {
|
|
|
+ addMessage(redirectAttributes, "审核通过的数据仅发起人或管理员可编辑");
|
|
|
return "redirect:" + Global.getAdminPath() + "/workKnowledgeBase/share/list";
|
|
|
}
|
|
|
}
|
|
|
@@ -414,11 +441,39 @@ public class WorkKnowledgeBaseShareController extends BaseController {
|
|
|
result.put("message", "审核中的数据不允许删除");
|
|
|
return result;
|
|
|
}
|
|
|
- // 审核通过仅管理员可删除
|
|
|
+ // 审核通过仅管理员/经理可删除,公司内部发文根节点下的数据发起人也可删除
|
|
|
if (auditStatus != null && auditStatus.equals(WorkKnowledgeBaseShareService.AUDIT_STATUS_PASSED)) {
|
|
|
- if (!UserUtils.getUser().isAdmin() && !UserUtils.isManager()) {
|
|
|
+ // 前端可能未传递treeNodeId,从数据库查询完整记录
|
|
|
+ WorkKnowledgeBaseShareInfo existRecord = null;
|
|
|
+ String treeNodeId = shareInfo.getTreeNodeId();
|
|
|
+ if (StringUtils.isBlank(treeNodeId) && StringUtils.isNotBlank(shareInfo.getId())) {
|
|
|
+ existRecord = shareService.get(shareInfo.getId());
|
|
|
+ if (existRecord != null) {
|
|
|
+ treeNodeId = existRecord.getTreeNodeId();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ boolean isInternalDoc = isInternalDocByTreeNodeId(treeNodeId);
|
|
|
+ boolean canDelete = false;
|
|
|
+ if (UserUtils.getUser().isAdmin() || UserUtils.isManager()) {
|
|
|
+ canDelete = true;
|
|
|
+ } else if (isInternalDoc) {
|
|
|
+ // 公司内部发文:发起人可删除
|
|
|
+ if (existRecord == null && StringUtils.isNotBlank(shareInfo.getId())) {
|
|
|
+ existRecord = shareService.get(shareInfo.getId());
|
|
|
+ }
|
|
|
+ if (existRecord != null) {
|
|
|
+ String currentUserId = UserUtils.getUser().getId();
|
|
|
+ String submitUserId = existRecord.getSubmitAuditUserId();
|
|
|
+ if (StringUtils.isNotBlank(submitUserId)) {
|
|
|
+ canDelete = currentUserId.equals(submitUserId);
|
|
|
+ } else if (existRecord.getCreateBy() != null) {
|
|
|
+ canDelete = currentUserId.equals(existRecord.getCreateBy().getId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!canDelete) {
|
|
|
result.put("success", false);
|
|
|
- result.put("message", "审核通过的数据仅管理员可删除");
|
|
|
+ result.put("message", "审核通过的数据仅发起人或管理员可删除");
|
|
|
return result;
|
|
|
}
|
|
|
}
|
|
|
@@ -901,4 +956,21 @@ public class WorkKnowledgeBaseShareController extends BaseController {
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 判断给定的treeNodeId是否属于"公司内部发文"根节点(parent_id=0)
|
|
|
+ */
|
|
|
+ private boolean isInternalDocByTreeNodeId(String treeNodeId) {
|
|
|
+ if (StringUtils.isBlank(treeNodeId)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ String rootId = shareService.getRootIdByNodeId(treeNodeId);
|
|
|
+ if (StringUtils.isNotBlank(rootId)) {
|
|
|
+ WorkKnowledgeBaseTreeInfo rootTreeInfo = shareService.getTreeInfoById(rootId);
|
|
|
+ if (rootTreeInfo != null && "公司内部发文".equals(rootTreeInfo.getTreeName()) && "0".equals(rootTreeInfo.getParentId())) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
}
|