WiiCITMS/docs/permission_system.md
2025-11-07 14:14:34 +08:00

5.3 KiB
Raw Permalink Blame History

权限控制系统文档

概述

WiiCITMS系统实现了一个基于角色和岗位的权限控制系统用于控制用户对各种资源的访问权限。权限控制系统支持组织管理、岗位管理、员工管理、请假审批等业务场景。

权限类型

系统支持以下权限类型:

权限ID 权限代码 权限名称 描述
1001 org:view 组织查看 允许查看组织信息
1002 org:create 组织创建 允许创建新组织
1003 org:update 组织更新 允许更新组织信息
1004 org:delete 组织删除 允许删除组织
2001 position:view 岗位查看 允许查看岗位信息
2002 position:create 岗位创建 允许创建新岗位
2003 position:update 岗位更新 允许更新岗位信息
2004 position:delete 岗位删除 允许删除岗位
3001 staff:view 人员查看 允许查看人员信息
3002 staff:create 人员创建 允许创建新人员
3003 staff:update 人员更新 允许更新人员信息
3004 staff:delete 人员删除 允许删除人员
4001 leave:approve 请假审批 允许审批请假申请
4002 leave:view 请假查看 允许查看请假记录
5001 workflow:admin 工作流管理 允许管理工作流程
9999 system:admin 系统管理 系统管理员权限

权限模型

  1. 权限定义每个权限由权限ID、权限代码、权限名称和描述组成。
  2. 岗位权限关联:岗位和权限是多对多的关系,通过hr_r_position_permission表进行关联。
  3. 员工权限继承:员工通过所在岗位继承权限。

权限检查机制

基本权限检查

系统实现了通用的权限检查方法:

// 检查用户是否有特定权限
result := CheckAccessControl(staffGuid, operation, resource, resourceId)
if !result.HasPermission {
    return nil, process.FailError(types.NoPermissionError, errors.New(result.ErrorMessage))
}

参数说明:

  • staffGuid: 员工ID
  • operation: 操作类型 (create, update, delete, view, approve)
  • resource: 资源类型 (organization, position, staff, leave, workflow)
  • resourceId: 资源ID可选

工作流权限检查

工作流审批有专门的权限检查机制:

  1. 审批权限检查:只有指定的审批人或具有全局审批权限的用户才能进行审批操作。
  2. 查看权限检查:工作流的发起人、审批人或具有全局工作流查看权限的用户可以查看工作流。
// 检查工作流审批权限
proc := hr.CheckWorkflowPermission(staffGuid, hr.OperationApprove, instanceGuid)
if proc.IsError() {
    return nil, proc
}

系统集成点

1. 请假创建和审批

// 创建请假记录
func CreateLeave(params CreateLeaveRequest, operatorGuid string) (*hr.LeaveModel, *process.Process) {
    // 验证操作者权限
    if operatorGuid != params.StaffGuid {
        result := CheckAccessControl(operatorGuid, OperationCreate, ResourceStaff, "")
        if !result.HasPermission {
            return nil, process.FailError(types.NoPermissionError, errors.New(result.ErrorMessage))
        }
    }
    // ...
}

// 审批请假
func ProcessApproval(params ApprovalActionRequest) (*ApprovalResult, *process.Process) {
    // 权限检查
    proc := CheckWorkflowApprovalPermission(params.ApproverGuid, params.InstanceGuid)
    if proc.IsError() {
        return nil, proc
    }
    // ...
}

2. 岗位员工分配

// 分配员工到岗位
func AssignStaffPositionWithPermission(params AssignStaffPositionRequest, operatorGuid string) (*StaffPositionResponse, *process.Process) {
    // 检查操作者权限
    result := CheckAccessControl(operatorGuid, OperationUpdate, ResourceStaff, "")
    if !result.HasPermission {
        return nil, process.FailError(types.NoPermissionError, errors.New(result.ErrorMessage))
    }
    // ...
}

3. 组织管理

// 更新组织
func UpdateOrganizationWithPermission(orgGuid string, params UpdateOrganizationRequest, operatorGuid string) (*OrganizationModel, *process.Process) {
    // 检查操作者权限
    result := CheckAccessControl(operatorGuid, OperationUpdate, ResourceOrganization, orgGuid)
    if !result.HasPermission {
        return nil, process.FailError(types.NoPermissionError, errors.New(result.ErrorMessage))
    }
    // ...
}

权限配置和管理

权限可以通过以下方式进行管理:

  1. 系统初始化时,通过InitSystemPermissions函数预定义基础权限。
  2. 通过AssignPermissionToPosition为岗位分配权限。
  3. 通过RemovePermissionFromPosition从岗位中移除权限。

权限分配建议

  1. 组织和岗位管理:仅授予人力资源部门相关人员或管理者。
  2. 员工信息管理:授予人力资源部门和各部门主管。
  3. 请假审批权限:授予各级主管和人力资源部门相关人员。
  4. 工作流管理权限通常只授予IT管理员或系统管理员。

最佳实践

  1. 遵循"最小权限原则",仅给用户分配必要的权限。
  2. 定期审核权限分配,移除不必要的权限。
  3. 对关键操作增加日志记录,便于追踪权限使用情况。
  4. 避免过度使用系统管理员权限,应尽量使用具体的业务权限。