78 lines
2.7 KiB
Go
78 lines
2.7 KiB
Go
package hr
|
||
|
||
import (
|
||
"WiiCITMS/process/common"
|
||
"WiiGenerates/WiiCITMS/generates/v1/go/types"
|
||
"WiiGoLibrary/apply/middle/process/v1"
|
||
"errors"
|
||
)
|
||
|
||
// CheckWorkflowApprovalPermission 检查是否有工作流审批权限
|
||
// staffGuid: 员工GUID
|
||
// instanceGuid: 工作流实例GUID
|
||
func CheckWorkflowApprovalPermission(staffGuid string, instanceGuid string) *process.Process {
|
||
// 首先检查是否有全局审批权限
|
||
result := CheckAccessControl(staffGuid, common.OperationApprove, common.ResourceLeave, "")
|
||
if result.HasPermission {
|
||
return process.Success(200)
|
||
}
|
||
|
||
// 如果没有全局权限,则调用通用的权限检查
|
||
return common.WorkflowSvc.CheckPermission(staffGuid, common.OperationApprove, instanceGuid)
|
||
}
|
||
|
||
// CanViewWorkflowInstance 检查是否可以查看工作流实例
|
||
// staffGuid: 员工GUID
|
||
// instanceGuid: 工作流实例GUID
|
||
func CanViewWorkflowInstance(staffGuid string, instanceGuid string) (bool, *process.Process) {
|
||
// 首先检查是否有实例查看权限
|
||
proc := common.WorkflowSvc.CheckPermission(staffGuid, common.OperationView, instanceGuid)
|
||
|
||
// 如果通过权限检查,说明有查看权限
|
||
if !proc.IsError() {
|
||
return true, process.Success(200)
|
||
}
|
||
|
||
// 如果是权限错误以外的错误,直接返回错误
|
||
if proc.Error != nil && proc.Error.Error() != "无权查看此工作流" {
|
||
return false, proc
|
||
}
|
||
if proc.IsError() {
|
||
return false, proc
|
||
}
|
||
|
||
|
||
// 否则检查是否有全局查看权限
|
||
result := CheckAccessControl(staffGuid, common.OperationView, common.ResourceWorkflow, "")
|
||
return result.HasPermission, process.Success(200)
|
||
}
|
||
|
||
// CheckWorkflowPermission 综合检查工作流权限
|
||
// staffGuid: 员工GUID
|
||
// operation: 操作类型(view, approve, create, update, delete)
|
||
// instanceGuid: 工作流实例GUID
|
||
func CheckWorkflowPermission(staffGuid string, operation string, instanceGuid string) *process.Process {
|
||
switch operation {
|
||
case common.OperationView:
|
||
canView, proc := CanViewWorkflowInstance(staffGuid, instanceGuid)
|
||
if proc.IsError() {
|
||
return proc
|
||
}
|
||
if !canView {
|
||
return process.FailError(types.NoPermissionError, errors.New("无权查看此工作流"))
|
||
}
|
||
return process.Success(200)
|
||
case common.OperationApprove:
|
||
return CheckWorkflowApprovalPermission(staffGuid, instanceGuid)
|
||
case common.OperationCreate, common.OperationUpdate, common.OperationDelete:
|
||
// 检查是否有工作流管理权限
|
||
result := CheckAccessControl(staffGuid, operation, common.ResourceWorkflow, "")
|
||
if !result.HasPermission {
|
||
return process.FailError(types.NoPermissionError, errors.New(result.ErrorMessage))
|
||
}
|
||
return process.Success(200)
|
||
default:
|
||
return process.FailError(types.InvalidParamError, errors.New("无效的操作类型"))
|
||
}
|
||
}
|