105 lines
3.0 KiB
Go
105 lines
3.0 KiB
Go
|
|
package oa
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"WiiCITMS/process/common"
|
|||
|
|
"WiiGenerates/WiiCITMS/generates/v1/go/types"
|
|||
|
|
"WiiGoLibrary/apply/middle/process/v1"
|
|||
|
|
"errors"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// 使用common包中的常量
|
|||
|
|
// 不再在这里重复定义
|
|||
|
|
|
|||
|
|
// 使用common.PermissionCheckResult代替PermissionCheckResult类型
|
|||
|
|
|
|||
|
|
// ApprovalPermissionCheck 审批权限检查
|
|||
|
|
// approverGuid: 审批人GUID
|
|||
|
|
// instanceGuid: 工作流实例GUID
|
|||
|
|
func ApprovalPermissionCheck(approverGuid string, instanceGuid string) *process.Process {
|
|||
|
|
// 获取工作流实例
|
|||
|
|
instance, proc := GetWorkflowInstance(instanceGuid)
|
|||
|
|
if proc.IsError() {
|
|||
|
|
return proc
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 获取当前节点
|
|||
|
|
node, proc := GetWorkflowNodeByID(instance.CurrentNodeID.String())
|
|||
|
|
if proc.IsError() {
|
|||
|
|
return proc
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 检查是否是审批节点
|
|||
|
|
if node.NodeType != common.NodeTypeApprove {
|
|||
|
|
return process.FailError(types.InvalidWorkflowStatusError, errors.New("当前节点不是审批节点"))
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 检查是否有审批权限
|
|||
|
|
// 1. 检查是否是指定审批人
|
|||
|
|
if node.ApproverType == 1 && node.ApproverValue == approverGuid {
|
|||
|
|
return process.Success(200)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 2. 检查是否有全局审批权限 - 这里需要外部验证,不在OA模块内实现
|
|||
|
|
// 因为这会导致循环导入问题
|
|||
|
|
|
|||
|
|
return process.FailError(types.NoPermissionError, errors.New("无权限进行此审批操作"))
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// CanViewWorkflow 检查是否可以查看工作流
|
|||
|
|
func CanViewWorkflow(staffGuid string, instanceGuid string) (bool, *process.Process) {
|
|||
|
|
// 获取工作流实例
|
|||
|
|
instance, proc := GetWorkflowInstance(instanceGuid)
|
|||
|
|
if proc.IsError() {
|
|||
|
|
return false, proc
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 检查是否是发起人
|
|||
|
|
if instance.InitiatorGuid.String() == staffGuid {
|
|||
|
|
return true, process.Success(200)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 检查是否是审批人
|
|||
|
|
isApprover := false
|
|||
|
|
nodes, proc := QueryWorkflowNodes(QueryNodesRequest{WorkflowGuid: instance.WorkflowGuid.String(), NodeType: -1})
|
|||
|
|
if proc.IsError() {
|
|||
|
|
return false, proc
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
for _, node := range nodes {
|
|||
|
|
if node.ApproverType == 1 && node.ApproverValue == staffGuid {
|
|||
|
|
isApprover = true
|
|||
|
|
break
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if isApprover {
|
|||
|
|
return true, process.Success(200)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 全局权限检查需要在外部实现,这里直接返回false
|
|||
|
|
return false, process.Success(200)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// CheckWorkflowPermission 检查工作流操作权限
|
|||
|
|
// staffGuid: 员工GUID
|
|||
|
|
// operation: 操作类型(view, approve, create, update, delete)
|
|||
|
|
// instanceGuid: 工作流实例GUID,如果是create操作可为空
|
|||
|
|
func CheckWorkflowPermission(staffGuid string, operation string, instanceGuid string) *process.Process {
|
|||
|
|
switch operation {
|
|||
|
|
case common.OperationView:
|
|||
|
|
canView, proc := CanViewWorkflow(staffGuid, instanceGuid)
|
|||
|
|
if proc.IsError() {
|
|||
|
|
return proc
|
|||
|
|
}
|
|||
|
|
if !canView {
|
|||
|
|
return process.FailError(types.NoPermissionError, errors.New("无权查看此工作流"))
|
|||
|
|
}
|
|||
|
|
return process.Success(200)
|
|||
|
|
case common.OperationApprove:
|
|||
|
|
return ApprovalPermissionCheck(staffGuid, instanceGuid)
|
|||
|
|
default:
|
|||
|
|
// 对于其他操作,需要在外部进行权限检查
|
|||
|
|
return process.FailError(types.NoPermissionError, errors.New("操作权限检查需要在外部实现"))
|
|||
|
|
}
|
|||
|
|
}
|