# RBAC 角色与权限矩阵

---
DDS-Section: 5. 用户注册与管理权限
DDS-Lines: L291-L320
---

## 角色层级

```
superadmin (超级管理员)
    ↓
   admin (管理员)
    ↓
  normal (普通用户)
    ↓
  third (三方用户)
```

## 角色注册权限矩阵

| 操作者角色 | 可注册角色 | 可管理范围 | 说明 |
|:---|:---|:---|:---|
| SuperAdmin | superadmin/admin/normal/third | 所有用户 | 完全权限 |
| Admin | normal/third | 自己注册的用户 | 谁注册谁管理 |
| Normal | third | 自己注册的用户 | 仅可注册三方用户 |
| Third | - | - | 无注册/管理权限 |

## 管理操作权限矩阵

| 操作 | SuperAdmin | Admin | Normal | Third |
|:---|:---|:---|:---|:---|
| 修改用户信息 | ✅ 所有 | ✅ 自己注册的 | ✅ 自己注册的 | ❌ |
| 启用用户 | ✅ 所有 | ✅ 自己注册的 | ✅ 自己注册的 | ❌ |
| 禁用用户 | ✅ 所有 | ✅ 自己注册的 | ✅ 自己注册的 | ❌ |
| 删除用户 | ✅ 所有 | ✅ 自己注册的 | ✅ 自己注册的 | ❌ |
| 重置密码 | ✅ 所有 | ✅ 自己注册的 | ❌ | ❌ |
| 延长有效期 | ✅ 所有 | ❌ | ❌ | ❌ |

## "谁注册谁管理"原则

### 实现机制

1. **注册关系记录**：`users.registered_by_id` 记录注册人 ID
2. **权限检查规则**：
   - SuperAdmin：可管理所有用户
   - Admin/Normal：只能管理 `registered_by_id == current_user_id` 的用户
3. **审批归属**：所有用户注册/管理工单由 SuperAdmin 审批

### 代码检查点

```go
// CheckManagementPermission 检查管理权限
func CheckManagementPermission(currentRole string, currentUserID, targetUserID int64, targetRegisteredByID int64) bool {
    // SuperAdmin 可管理所有
    if currentRole == "superadmin" {
        return true
    }
    
    // Admin/Normal 只能管理自己注册的用户
    if currentRole == "admin" || currentRole == "normal" {
        return targetRegisteredByID == currentUserID
    }
    
    // Third 无管理权限
    return false
}
```

## 注册权限校验

```go
// CheckRegistrationPermission 检查注册权限
func CheckRegistrationPermission(creatorRole, targetRole string) bool {
    switch creatorRole {
    case "superadmin":
        return true // 可注册所有角色
    case "admin":
        return targetRole == "normal" || targetRole == "third"
    case "normal":
        return targetRole == "third"
    default:
        return false
    }
}
```
