Files
makemd/docs/RULES/security.md

213 lines
5.0 KiB
Markdown
Raw Permalink Normal View History

# 安全规则
> **入口**: [_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: '***' };
```
## 7. 安全增强
### 7.1 安全措施
- **密码策略**:强密码要求和定期更换
- **双因素认证**管理员账号强制开启2FA
- **登录异常检测**:异常登录行为的监控和预警
- **权限边界检查**:防止权限提升攻击
### 7.2 性能优化
- **用户数据缓存**:提高用户信息查询速度
- **批量操作支持**:批量添加、更新用户
- **分页优化**:大数据量用户列表的高效展示
- **异步处理**:用户导入等耗时操作的异步处理
---
*最后更新: 2026-03-29*