Skip to content

Latest commit

 

History

History
275 lines (219 loc) · 18.9 KB

File metadata and controls

275 lines (219 loc) · 18.9 KB

FBA-Slim 瘦身指南

本文档记录了 fba-slim 与 fba 完整版之间的差异,方便日后从完整版合并代码时快速瘦身

功能差异概览

模块 完整版 精简版 说明
用户认证 (JWT) 完整保留
RBAC (角色/菜单/部门/权限校验) 整体移除,仅保留 DependsSuperUser
用户 CRUD 保留(移除 dept/role 关联)
操作日志/登录日志 移除 DB 日志,中间件仅控制台输出
多级缓存 (Local + Redis + PubSub) 完整保留
Snowflake 分布式 ID 完整保留
文件上传 完整保留
密码安全/历史记录 完整保留
config 插件 保留
插件核心系统 完整保留
Celery 任务系统 整体移除
Socket.IO 实时通信 整体移除
Prometheus + OTel 可观测性 整体移除
监控 API (online/redis/server) 整体移除
数据权限 (DataRule/DataScope) 整体移除
dict 插件 整体移除
email 插件 整体移除
notice 插件 整体移除
oauth2 插件 整体移除
code_generator 插件 整体移除

已删除的目录

backend/app/task/                           # Celery 任务系统
backend/common/socketio/                    # Socket.IO 实时通信
backend/common/observability/               # Prometheus + OpenTelemetry
backend/app/admin/api/v1/monitor/           # 监控 API (online/redis/server)
backend/app/admin/tests/                    # 测试文件
backend/app/admin/api/v1/log/               # 日志 API (login_log/opera_log)
backend/plugin/dict/                        # 字典插件
backend/plugin/email/                       # 邮件插件
backend/plugin/notice/                      # 通知插件
backend/plugin/oauth2/                      # OAuth2 插件
backend/plugin/code_generator/              # 代码生成插件
deploy/backend/grafana/                     # Grafana 部署配置

已删除的文件

# RBAC (角色/菜单/部门)
backend/app/admin/model/role.py
backend/app/admin/model/menu.py
backend/app/admin/model/dept.py
backend/app/admin/model/m2m.py
backend/app/admin/schema/role.py
backend/app/admin/schema/menu.py
backend/app/admin/schema/dept.py
backend/app/admin/crud/crud_role.py
backend/app/admin/crud/crud_menu.py
backend/app/admin/crud/crud_dept.py
backend/app/admin/service/role_service.py
backend/app/admin/service/menu_service.py
backend/app/admin/service/dept_service.py
backend/app/admin/api/v1/sys/role.py
backend/app/admin/api/v1/sys/menu.py
backend/app/admin/api/v1/sys/dept.py
backend/common/security/rbac.py
backend/common/security/permission.py
backend/utils/build_tree.py

# 数据权限
backend/app/admin/model/data_rule.py
backend/app/admin/model/data_scope.py
backend/app/admin/schema/data_rule.py
backend/app/admin/schema/data_scope.py
backend/app/admin/crud/crud_data_rule.py
backend/app/admin/crud/crud_data_scope.py
backend/app/admin/service/data_rule_service.py
backend/app/admin/service/data_scope_service.py
backend/app/admin/api/v1/sys/data_rule.py
backend/app/admin/api/v1/sys/data_scope.py

# 监控 API
backend/app/admin/schema/monitor.py

# 可观测性
backend/common/observability/otel.py
backend/common/observability/prometheus/fastapi.py
backend/common/observability/prometheus/queue.py
backend/common/observability/prometheus/sqlalchemy.py

# 日志系统
backend/app/admin/model/login_log.py
backend/app/admin/model/opera_log.py
backend/app/admin/schema/login_log.py
backend/app/admin/schema/opera_log.py
backend/app/admin/crud/crud_login_log.py
backend/app/admin/crud/crud_opera_log.py
backend/app/admin/service/login_log_service.py
backend/app/admin/service/opera_log_service.py
backend/common/queue.py

# 部署
deploy/backend/supervisor/fba_celery_beat.conf
deploy/backend/supervisor/fba_celery_flower.conf
deploy/backend/supervisor/fba_celery_worker.conf
deploy/backend/grafana/dashboards/fba_celery.json

已修改的文件

模型层

文件 修改内容
backend/app/admin/model/__init__.py 仅保留 UserUserPasswordHistory 导出
backend/app/admin/model/user.py 删除 dept_id 字段

Schema 层

文件 修改内容
backend/app/admin/schema/user.py 删除 dept_id/roles 字段、AddUserRoleParam/GetUserInfoWithRelationDetail/GetCurrentUserInfoWithRelationDetail/AddOAuth2UserParam

CRUD 层

文件 修改内容
backend/app/admin/crud/crud_user.py 删除 Role/Dept/Menu/m2m 全部引用,移除 get_join() 方法、JoinConfig、m2m 操作;add()/update()/delete()/get_select() 简化

Service 层

文件 修改内容
backend/app/admin/service/user_service.py 删除 get_roles() 方法、dept/role 验证逻辑、dept 参数;get_userinfo() 改用 user_dao.get()
backend/app/admin/service/auth_service.py 删除 login_log_service/menu_dao 引用、get_codes() 方法、background_tasks 参数

Utils/安全层

文件 修改内容
backend/app/admin/utils/cache.py 删除 clear_by_role_id()/clear_by_menu_id()/clear_by_data_scope_id()/clear_by_data_rule_id() 方法
backend/utils/trace_id.py 删除 OtelTraceIdPlugin
backend/utils/dynamic_config.py 删除邮箱插件相关 load_email_config(),仅保留用户安全与登录配置加载

API 层

文件 修改内容
backend/app/admin/api/v1/sys/user.py 删除 get_user_roles 路由、dept 参数;delete_user 改用 DependsSuperUser;响应类型改为 GetUserInfoDetail
backend/app/admin/api/v1/sys/file.py RequestPermission + DependsRBAC 改为 DependsJwtAuth
backend/app/admin/api/v1/sys/__init__.py 仅保留 user_routerfile_routerplugin_router
backend/app/admin/api/v1/auth/auth.py 删除 get_codes 路由、background_tasks 参数
backend/app/admin/api/router.py 删除 monitor_routerlog_router
backend/app/router.py 删除 task_v1
backend/app/admin/api/v1/sys/plugin.py RequestPermission + DependsRBAC 改为 DependsSuperUser
backend/plugin/config/api/v1/sys/config.py RequestPermission + DependsRBAC 改为 DependsSuperUser

JWT/中间件层

文件 修改内容
backend/common/security/jwt.py GetUserInfoWithRelationDetailGetUserInfoDetailget_current_user() 改用 user_dao.get(),删除 dept/role 状态检查
backend/middleware/jwt_auth_middleware.py GetUserInfoWithRelationDetailGetUserInfoDetail
backend/middleware/opera_log_middleware.py 移除 DB 队列/消费者/入库,改为纯控制台日志输出
backend/middleware/access_middleware.py 删除 Prometheus 导入和 2 处计数器调用

核心层

文件 修改内容
backend/core/registrar.py 删除 socketio/prometheus/otel 导入、register_socket_app()register_metrics()、OtelTraceIdPlugin、create_task(OperaLogMiddleware.consumer())
backend/core/conf.py 删除 CELERY/GRAFANA/DATA_PERMISSION/OAUTH2/EMAIL/WS/CODE_GENERATOR/OPERA_LOG_/RBAC_ROLE_MENU_ 配置段;PLUGIN_REQUIRED 仅保留 config
backend/database/db.py 删除 SQLAlchemy 连接池 Prometheus 指标监听
backend/main.py 保留必需插件检测 check_required_plugins(),删除插件依赖自动安装逻辑
backend/plugin/core.py get_required_plugins() 删除 RBAC 模式相关 casbin_rbac 逻辑

CLI

文件 修改内容
backend/cli.py 删除 Celery/插件安装卸载/代码生成相关命令,FbaCli.subcmd 简化为 Init | Run | Format | Alembic

Enum

文件 修改内容
backend/common/enums.py 删除 MenuTypeMethodTypeBuildTreeTypeRoleDataRuleOperatorTypeRoleDataRuleExpressionTypeLoginLogStatusTypeOperaLogCipherType 枚举
backend/plugin/config/enums.py 删除邮箱配置类型 ConfigType.email

SQL 初始化数据

文件 修改内容
backend/sql/mysql/init_test_data.sql 仅保留 sys_user INSERT(删除 dept/menu/role/role_menu/user_role/data_scope/data_rule 等)
backend/sql/mysql/init_snowflake_test_data.sql 同上
backend/sql/postgresql/init_test_data.sql 同上
backend/sql/postgresql/init_snowflake_test_data.sql 同上
backend/plugin/config/sql/**/init*.sql 删除 sys_menu 初始化与 EMAIL 配置,仅保留 sys_config 中用户安全/登录配置
backend/plugin/config/sql/**/destroy*.sql 删除 sys_menu 清理语句,仅保留 sys_config 清理

配置/部署

文件 修改内容
backend/.env.example 删除 Celery/RabbitMQ/OAuth2/Email 环境变量
pyproject.toml 删除 celery/socketio/opentelemetry/prometheus/psutil/flower/gevent/aio-pika 等依赖;保留 dulwich(插件 Git 安装仍依赖)
docker-compose.yml 删除 rabbitmq/celery/grafana 全套容器
Dockerfile 简化为单一 server 镜像,删除 celery worker/beat/flower 阶段;保留插件依赖预安装步骤,用于打包随镜像发布的插件依赖
deploy/backend/docker-compose/.env.docker 删除 RabbitMQ/Celery/Grafana 端口映射
deploy/backend/docker-compose/.env.server 删除 Celery/OAuth2/Email 环境变量
deploy/backend/nginx.conf 删除 Flower 代理配置

合并指南

从 fba 完整版同步代码到 fba-slim 后,需要关注以下冲突区域:

快速检测 rg 模式

合并后运行以下命令,快速找出需要处理的非 slim 引用:

# 全量残留扫描:唯一可接受命中是 OperaLogMiddleware 导入(控制台日志保留)
rg -n "celery|CELERY_|app\.task|python-socketio|socketio|prometheus|opentelemetry|psutil|flower|gevent|aio-pika|rabbitmq|GRAFANA_|OAUTH2_|EMAIL_CAPTCHA|CACHE_DICT|RBAC_ROLE_MENU|DATA_PERMISSION|RequestPermission|DependsRBAC|GetUserInfoWithRelation|GetCurrentUserInfoWithRelation|sys_menu|sys_role|sys_dept|data_scope|data_rule|login_log|opera_log" backend pyproject.toml Dockerfile docker-compose.yml deploy -g '!**/__pycache__/**'

# 精确 DB 日志 / RBAC / 数据权限残留扫描:应无命中
rg -n "opera_log_service|login_log_service|OPERA_LOG_|batch_dequeue|opera_log_queue|LoginLog|DataRule|DataScope|RequestPermission|DependsRBAC|GetUserInfoWithRelationDetail|CACHE_DICT_REDIS_PREFIX|EMAIL_CAPTCHA_REDIS_PREFIX" backend pyproject.toml Dockerfile docker-compose.yml deploy -g '!**/__pycache__/**'

# 已移除依赖残留扫描:应无命中
rg -n "celery|celery-aio|opentelemetry|prometheus-client|psutil|python-socketio|flower|gevent|aio-pika|psycopg|pymysql" pyproject.toml

注:slim 版仍保留 backend/middleware/opera_log_middleware.pyOperaLogMiddleware,用于控制台访问日志;检测 DB 日志残留时不要把该中间件类名视为问题。

高冲突文件

以下文件在完整版更新时最容易产生冲突:

  1. backend/core/conf.py — 配置字段差异最大
  2. backend/core/registrar.py — 中间件和组件注册差异
  3. backend/cli.py — CLI 命令结构差异大
  4. backend/main.py — 插件检测逻辑已保留
  5. backend/common/security/jwt.pyGetUserInfoDetail vs GetUserInfoWithRelationDetailget_current_user() 差异
  6. backend/app/admin/crud/crud_user.py — 无 get_join/JoinConfig/m2m 操作
  7. backend/app/admin/service/auth_service.py — 登录日志、menu_dao、background_tasks 差异
  8. backend/middleware/opera_log_middleware.py — 完整版有 DB 队列,slim 版仅控制台
  9. backend/middleware/jwt_auth_middleware.py — schema 类型差异
  10. backend/plugin/config/sql/** — config 插件 SQL 不能再引用已删除的 sys_menu
  11. pyproject.toml — 依赖列表差异
  12. docker-compose.yml — 容器编排差异
  13. Dockerfile — 构建阶段差异,需保留插件依赖预安装步骤但删除 Celery 多镜像阶段
  14. deploy/backend/nginx.conf — Flower 代理容易残留

合并策略

  1. 优先接受 slim 版本的文件:conf.pyregistrar.pycli.pymain.pyDockerfiledocker-compose.yml
  2. 需要手动合并的文件:CRUD/Service/API 层(可能有新增功能需要保留,但需移除 RBAC/数据权限/可观测性引用)
  3. 直接接受完整版的文件:不涉及上述移除功能的纯业务逻辑改动
  4. 合并后运行上述 rg 命令清理残留引用
  5. 运行 fba format 和导入检查确认格式、锁文件、导出依赖和导入无误

验证清单

瘦身完成后至少运行:

fba format
uv run python -c "from backend.main import app; print(app.title); print(len(app.routes))"