本文档记录了 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 |
仅保留 User、UserPasswordHistory 导出 |
backend/app/admin/model/user.py |
删除 dept_id 字段 |
| 文件 |
修改内容 |
backend/app/admin/schema/user.py |
删除 dept_id/roles 字段、AddUserRoleParam/GetUserInfoWithRelationDetail/GetCurrentUserInfoWithRelationDetail/AddOAuth2UserParam 类 |
| 文件 |
修改内容 |
backend/app/admin/crud/crud_user.py |
删除 Role/Dept/Menu/m2m 全部引用,移除 get_join() 方法、JoinConfig、m2m 操作;add()/update()/delete()/get_select() 简化 |
| 文件 |
修改内容 |
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 参数 |
| 文件 |
修改内容 |
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(),仅保留用户安全与登录配置加载 |
| 文件 |
修改内容 |
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_router、file_router、plugin_router |
backend/app/admin/api/v1/auth/auth.py |
删除 get_codes 路由、background_tasks 参数 |
backend/app/admin/api/router.py |
删除 monitor_router、log_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 |
| 文件 |
修改内容 |
backend/common/security/jwt.py |
GetUserInfoWithRelationDetail → GetUserInfoDetail;get_current_user() 改用 user_dao.get(),删除 dept/role 状态检查 |
backend/middleware/jwt_auth_middleware.py |
GetUserInfoWithRelationDetail → GetUserInfoDetail |
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 逻辑 |
| 文件 |
修改内容 |
backend/cli.py |
删除 Celery/插件安装卸载/代码生成相关命令,FbaCli.subcmd 简化为 Init | Run | Format | Alembic |
| 文件 |
修改内容 |
backend/common/enums.py |
删除 MenuType、MethodType、BuildTreeType、RoleDataRuleOperatorType、RoleDataRuleExpressionType、LoginLogStatusType、OperaLogCipherType 枚举 |
backend/plugin/config/enums.py |
删除邮箱配置类型 ConfigType.email |
| 文件 |
修改内容 |
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 后,需要关注以下冲突区域:
合并后运行以下命令,快速找出需要处理的非 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.py 的 OperaLogMiddleware,用于控制台访问日志;检测 DB 日志残留时不要把该中间件类名视为问题。
以下文件在完整版更新时最容易产生冲突:
backend/core/conf.py — 配置字段差异最大
backend/core/registrar.py — 中间件和组件注册差异
backend/cli.py — CLI 命令结构差异大
backend/main.py — 插件检测逻辑已保留
backend/common/security/jwt.py — GetUserInfoDetail vs GetUserInfoWithRelationDetail,get_current_user() 差异
backend/app/admin/crud/crud_user.py — 无 get_join/JoinConfig/m2m 操作
backend/app/admin/service/auth_service.py — 登录日志、menu_dao、background_tasks 差异
backend/middleware/opera_log_middleware.py — 完整版有 DB 队列,slim 版仅控制台
backend/middleware/jwt_auth_middleware.py — schema 类型差异
backend/plugin/config/sql/** — config 插件 SQL 不能再引用已删除的 sys_menu
pyproject.toml — 依赖列表差异
docker-compose.yml — 容器编排差异
Dockerfile — 构建阶段差异,需保留插件依赖预安装步骤但删除 Celery 多镜像阶段
deploy/backend/nginx.conf — Flower 代理容易残留
- 优先接受 slim 版本的文件:
conf.py、registrar.py、cli.py、main.py、Dockerfile、docker-compose.yml
- 需要手动合并的文件:CRUD/Service/API 层(可能有新增功能需要保留,但需移除 RBAC/数据权限/可观测性引用)
- 直接接受完整版的文件:不涉及上述移除功能的纯业务逻辑改动
- 合并后运行上述
rg 命令清理残留引用
- 运行
fba format 和导入检查确认格式、锁文件、导出依赖和导入无误
瘦身完成后至少运行:
fba format
uv run python -c "from backend.main import app; print(app.title); print(len(app.routes))"