rwadurian/backend/services/mining-admin-service/src/api/controllers
hailin 55cfc96464 feat(capability): 实现用户能力权限控制系统(Capability-based Permission)
借鉴 Stripe Capability 模型,实现 13 项细粒度用户功能权限控制:
LOGIN, TRADING, C2C, TRANSFER_IN/OUT, P2P_SEND/RECEIVE,
MINING_CLAIM, KYC, PROFILE_EDIT, VIEW_ASSET/TEAM/RECORDS

## 架构设计
- auth-service 为能力数据唯一写入点(DB + Redis DB14 缓存)
- 下游服务通过独立 ioredis 客户端直连 Redis DB14 检查能力(~1ms)
- 默认全部开启(fail-open):无缓存/Redis 故障 = 允许通行
- Guard 执行顺序:JwtAuthGuard → CapabilityGuard

## Phase 1: auth-service 核心
- Prisma Schema: UserCapability + CapabilityLog 两张表
- Domain: Capability 枚举, CapabilityMap 类型, Repository 接口
- Infrastructure: PrismaCapabilityRepository(含 $transaction 原子操作)
- Application: CapabilityService(Redis 缓存优先 → DB fallback → 写回 Redis TTL 1h)
- Scheduler: 每 60 秒扫描到期限制自动恢复(Redis 分布式锁防重复)
- API: GET /auth/user/capabilities (JWT), Internal CRUD API (服务间)
- 登录/refreshToken 均增加 LOGIN 能力检查

## Phase 2: 下游 CapabilityGuard
- trading-service: 14 个端点标注(TRADING/C2C/TRANSFER/P2P_SEND/VIEW_ASSET)
- contribution-service: 3 个端点标注(VIEW_RECORDS/VIEW_TEAM)
- mining-service: Guard 注册 + JwtAuthGuard accountSequence 兼容修复
- auth-service: KYC 端点标注(controller 级别 UseGuards)

## Phase 3: mining-admin-service
- CapabilityAdminService: 代理 auth-service internal API + 本地 AuditLog
- CapabilityController: Admin CRUD + 批量设置 + 变更日志查询

## Phase 4: mining-admin-web
- capability-management.tsx: 分组 Switch 开关 + 禁用 Dialog(原因+到期时间)+ 变更日志分页
- React Query hooks: useCapabilities/useSetCapability/useCapabilityLogs
- 用户详情页新增"权限管理"Tab

## Phase 5: mining-app (Flutter)
- CapabilityMap 数据模型 + ForbiddenException 异常类
- api_client.dart: 403 响应适配 ExceptionFilter 包装格式
- capabilitiesProvider: 登录后获取能力列表,fail-open 降级

## 审计修复
- CRITICAL: users.api.ts capability 方法移入 usersApi 对象内部
- P0: Flutter 403 解析路径适配 {error:{code,message}} 实际格式
- P0: 批量接口 operatorId 提升到 body 顶层匹配 auth-service 契约
- P1: mining-service JwtAuthGuard accountSequence fallback payload.sub
- P1: refreshCache 加 try/catch 防止 Redis 故障导致 500
- P1: processExpiredRestrictions 改用 upsertWithLog 事务方法
- P1: C2C upload-proof 补加 @RequireCapability('C2C')
- HIGH: internal.controller.ts 新增 capability 枚举校验
- HIGH: admin capability.controller.ts adminId fallback + query params 类型修复
- MEDIUM: setCapability 改用 $transaction 保证 upsert+log 原子性

## 部署注意
- 需运行: cd auth-service && npx prisma migrate dev --name add_user_capabilities
- 需配置: mining-admin-service .env AUTH_SERVICE_URL=http://auth-service:3010

## 待后续处理(P2)
- P2P_RECEIVE 需在业务逻辑层检查(收款方无主动请求)
- MINING_CLAIM/PROFILE_EDIT 待对应端点实现后标注
- getCapabilities 返回 Map 转 Array 丢失 reason/expiresAt 详细字段

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 22:19:56 -08:00
..
audit.controller.ts fix(mining-admin): fix audit logs API path and response format 2026-01-14 02:18:53 -08:00
auth.controller.ts feat(mining-admin-service): 添加/auth/profile接口 2026-01-11 01:01:49 -08:00
batch-mining.controller.ts feat(batch-mining): 添加详细的调试日志 2026-01-21 05:49:04 -08:00
capability.controller.ts feat(capability): 实现用户能力权限控制系统(Capability-based Permission) 2026-02-27 22:19:56 -08:00
config.controller.ts fix(pool-account): 修复 seed.ts 覆盖池余额 + 激活挖矿前校验池余额 2026-02-03 02:00:59 -08:00
dashboard.controller.ts fix(mining-admin): fetch dashboard data from remote services 2026-01-16 08:25:07 -08:00
health.controller.ts feat(mining-ecosystem): 添加挖矿生态系统完整微服务与前端 2026-01-10 17:45:46 -08:00
manual-mining.controller.ts fix(mining-admin-service): 修复 manual-mining 分页参数 NaN 问题 2026-02-02 02:37:55 -08:00
mobile-version.controller.ts fix(mining-admin): 适配 mining-app 版本检查 API 格式 2026-01-29 13:26:13 -08:00
pending-contributions.controller.ts feat(pending-contributions): 添加待解锁算力分类账功能 2026-01-19 18:13:22 -08:00
pool-account.controller.ts refactor(pool-accounts): 移除硬编码钱包名,改为从后端 API 动态获取 2026-02-03 02:57:40 -08:00
reports.controller.ts feat(mining-admin): add /reports/daily endpoint for frontend reports page 2026-01-14 02:10:47 -08:00
system-accounts.controller.ts feat(mining): 批量补发30%分配到运营和总部账户,并添加交易筛选器 2026-02-01 04:25:20 -08:00
upgrade-version.controller.ts feat(mining-admin): 新建公开版本管理接口供 mobile-upgrade 前端使用 2026-01-29 12:53:29 -08:00
users.controller.ts feat(admin-web): P2P划转记录管理页面 + 手续费汇总 2026-01-30 10:41:55 -08:00
version.controller.ts feat: 集成 mining-app 升级和遥测功能,扩展 mobile-upgrade 支持多应用 2026-01-28 20:03:26 -08:00