# 权限控制系统文档 ## 概述 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. **员工权限继承**:员工通过所在岗位继承权限。 ## 权限检查机制 ### 基本权限检查 系统实现了通用的权限检查方法: ```go // 检查用户是否有特定权限 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. **查看权限检查**:工作流的发起人、审批人或具有全局工作流查看权限的用户可以查看工作流。 ```go // 检查工作流审批权限 proc := hr.CheckWorkflowPermission(staffGuid, hr.OperationApprove, instanceGuid) if proc.IsError() { return nil, proc } ``` ## 系统集成点 ### 1. 请假创建和审批 ```go // 创建请假记录 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. 岗位员工分配 ```go // 分配员工到岗位 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. 组织管理 ```go // 更新组织 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. 避免过度使用系统管理员权限,应尽量使用具体的业务权限。