Files
makemd/docs/RULES/security.md
wurenzhi 1b14947e7b refactor: 优化代码结构和类型定义
feat(types): 添加express.d.ts类型引用
style: 格式化express.d.ts中的接口定义
refactor: 移除未使用的AntFC类型导入
chore: 删除自动生成的.umi-production文件
feat: 添加店铺管理相关表和初始化脚本
docs: 更新安全规则和交互指南文档
refactor: 统一使用FC类型替代React.FC
perf: 优化图表组件导入方式
style: 添加.prettierrc配置文件
refactor: 调整组件导入顺序和结构
feat: 添加平台库存管理路由
fix: 修复订单同步时的库存检查逻辑
docs: 更新RBAC设计和租户管理文档
refactor: 优化部门控制器代码
2026-03-30 01:20:57 +08:00

213 lines
5.0 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.
# 安全规则
> **入口**: [_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*