# 安全规则

> **入口**: [_index.md](_index.md)

---

## 1. RBAC模型

### 1.1 预设角色

| 角色 | 权限范围 | 说明 |
|------|---------|------|
| **ADMIN** | 全部 | 系统管理员 |
| **MANAGER** | 部门级 | 运营主管 |
| **OPERATOR** | 个人级 | 运营专员 |
| **FINANCE** | 财务级 | 财务主管 |
| **SOURCING** | 采购级 | 采购专家 |
| **LOGISTICS** | 物流级 | 物流专家 |
| **ANALYST** | 只读 | 数据分析师 |

### 1.2 角色权限矩阵

| 操作类型 | OPERATOR | MANAGER | FINANCE | ADMIN |
|---------|----------|---------|---------|-------|
| 查看数据 | ✅ 自己 | ✅ 部门 | ✅ 财务 | ✅ 全部 |
| 创建数据 | ✅ | ✅ | ✅ | ✅ |
| 修改数据 | ✅ 自己 | ✅ 部门 | ✅ 财务 | ✅ 全部 |
| 删除数据 | ❌ | ✅ 部门 | ✅ 财务 | ✅ 全部 |
| 审批操作 | ❌ | ✅ 低风险 | ✅ 中风险 | ✅ 全部 |
| 系统配置 | ❌ | ❌ | ❌ | ✅ |

---

## 2. 数据隔离

### 2.1 隔离层级

```
租户隔离 (Tenant)
  └── 组织隔离 (Organization)
       └── 部门隔离 (Department)
            └── 团队隔离 (Team)
                 └── 个人隔离 (Self)
```

### 2.2 数据范围类型

| 范围 | 英文 | 说明 |
|------|------|------|
| 仅自己 | SELF | 只看自己创建的数据 |
| 本团队 | TEAM | 看自己团队的数据 |
| 本部门 | DEPT | 看自己部门的数据 |
| 本组织 | ORG | 看整个公司的数据 |
| 全平台 | ALL | 超管，看所有租户数据 |

### 2.3 查询过滤实现

```typescript
// Service层实现数据隔离
async listOrders(ctx: Context, params: ListParams) {
  const { tenantId, dataScope, parentId } = ctx.state.user;
  
  const query = db('cf_order').where('tenant_id', tenantId);
  
  switch (dataScope) {
    case 'SELF':
      query.where('created_by', ctx.state.user.id);
      break;
    case 'TEAM':
      query.where('team_id', parentId);
      break;
    case 'DEPT':
      query.where('dept_id', parentId);
      break;
    case 'ORG':
      // 已通过 tenant_id 过滤
      break;
    case 'ALL':
      // 超管，不过滤
      break;
  }
  
  return query;
}
```

---

## 3. 操作风险等级

### 3.1 风险分级

| 等级 | 操作类型 | 最低审核权限 | 自动执行 |
|------|---------|-------------|---------|
| **低风险** | 库存预警、数据同步 | OPERATOR | ✅ 允许 |
| **中风险** | 定价调整、广告投放 | MANAGER | ✅ 高置信度允许 |
| **高风险** | 退款审批、合同签订 | FINANCE | ❌ 禁止 |
| **极高风险** | 大额转账、系统配置 | ADMIN | ❌ 禁止 |

### 3.2 AI决策权限

```typescript
interface AIDecisionPermission {
  module: string;
  action: string;
  riskLevel: 'low' | 'medium' | 'high' | 'critical';
  minReviewerRole: 'OPERATOR' | 'MANAGER' | 'FINANCE' | 'ADMIN';
  autoExecute: boolean;
  autoExecuteConfidence: number;  // 0.0 - 1.0
  requireDualApproval: boolean;
}
```

---

## 4. 决策流程门禁

### 4.1 状态流转

```
SUGGESTED → PENDING_REVIEW → EXECUTED/REJECTED
```

### 4.2 强制规则

| 规则 | 说明 |
|------|------|
| **禁止** | Agent 直接修改核心业务数据 |
| **必须** | 人工在 Console 端确认后方可执行 |
| **必须** | 所有决策记录审计日志 |

### 4.3 核心业务数据

- 价格调整
- 退款审批
- 订单创建
- 合同签订
- 大额转账

---

## 5. 审计日志

### 5.1 必须记录

| 字段 | 说明 |
|------|------|
| `operator_id` | 操作人ID |
| `operator_role` | 操作人角色 |
| `action` | 操作类型 |
| `target_type` | 目标类型 |
| `target_id` | 目标ID |
| `before_value` | 操作前值 |
| `after_value` | 操作后值 |
| `trace_id` | 链路追踪ID |
| `created_at` | 操作时间 |

### 5.2 日志保留

| 日志类型 | 保留期限 |
|---------|---------|
| 登录日志 | 90天 |
| 操作日志 | 180天 |
| 审计日志 | 365天 |
| 异常日志 | 30天 |

---

## 6. 敏感数据处理

### 6.1 敏感字段

| 字段类型 | 处理方式 |
|---------|---------|
| 密码 | 加密存储，禁止明文 |
| 手机号 | 脱敏显示 `138****1234` |
| 银行卡 | 脱敏显示 `**** **** **** 1234` |
| 身份证 | 脱敏显示 `110***********1234` |
| API密钥 | 加密存储，禁止日志输出 |

### 6.2 禁止行为

```typescript
// ❌ 禁止
console.log('API Key:', apiKey);
logger.info('User password:', password);
ctx.body = { password: user.password };

// ✅ 正确
logger.info('API Key: ***');
ctx.body = { password: '***' };
```

---

*最后更新: 2026-03-22*
