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

148 lines
5.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 权限控制系统文档
## 概述
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. 避免过度使用系统管理员权限,应尽量使用具体的业务权限。