5.3 KiB
5.3 KiB
权限控制系统文档
概述
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 | 系统管理 | 系统管理员权限 |
权限模型
- 权限定义:每个权限由权限ID、权限代码、权限名称和描述组成。
- 岗位权限关联:岗位和权限是多对多的关系,通过
hr_r_position_permission表进行关联。 - 员工权限继承:员工通过所在岗位继承权限。
权限检查机制
基本权限检查
系统实现了通用的权限检查方法:
// 检查用户是否有特定权限
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,可选
工作流权限检查
工作流审批有专门的权限检查机制:
- 审批权限检查:只有指定的审批人或具有全局审批权限的用户才能进行审批操作。
- 查看权限检查:工作流的发起人、审批人或具有全局工作流查看权限的用户可以查看工作流。
// 检查工作流审批权限
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))
}
// ...
}
权限配置和管理
权限可以通过以下方式进行管理:
- 系统初始化时,通过
InitSystemPermissions函数预定义基础权限。 - 通过
AssignPermissionToPosition为岗位分配权限。 - 通过
RemovePermissionFromPosition从岗位中移除权限。
权限分配建议
- 组织和岗位管理:仅授予人力资源部门相关人员或管理者。
- 员工信息管理:授予人力资源部门和各部门主管。
- 请假审批权限:授予各级主管和人力资源部门相关人员。
- 工作流管理权限:通常只授予IT管理员或系统管理员。
最佳实践
- 遵循"最小权限原则",仅给用户分配必要的权限。
- 定期审核权限分配,移除不必要的权限。
- 对关键操作增加日志记录,便于追踪权限使用情况。
- 避免过度使用系统管理员权限,应尽量使用具体的业务权限。