Files
huangjingfen/docs/license-commercial-auth-license_replacement_execution_94b55501.plan.md
2026-04-30 17:57:03 +08:00

11 KiB
Raw Blame History

name, overview, todos, isProject
name overview todos isProject
license replacement execution 把现有合规替换方案落成可执行推进计划:按阶段改动、测试、提交,优先处理常用 out/supplier/admin 路径,客服、企业微信和库存链路最后处理。
id content status
baseline 固定基线依赖清单、测试记录模板和核心接口响应基线 completed
id content status
out-token 实现 AccessTokenService 并替换 out 外部账号 token 解析依赖 completed
id content status
search-builder 实现 SearchConditionBuilder 并替换通用 SearchDaoTrait 依赖 completed
id content status
base-controller 新增 AppBaseController 并按 out、supplier、admin 分入口迁移 completed
id content status
license-endpoints 清理授权/版权接口为自有系统信息,不返回伪造授权状态 completed
id content status
config-closeout 移除 config/app.php 的 BaseAuth 配置依赖并全库收口搜索 completed
id content status
deferred-modules 最后迁移企业微信 DAO、库存链路和未使用客服模块 completed
false

合规替换执行计划

执行原则

  • pro_v3.5.1/.cursor/plans/compliant-license-dependency-replacement.plan.md 为源方案,不做绕过授权、伪造授权或替换加密商业文件的改动。
  • 每个阶段独立完成:改动、自动化检查、手工接口回归、测试记录、单独提交。
  • 阶段未通过验收不得进入下一阶段;不得把多个阶段混在同一个提交里。
  • 客服模块、企业微信 DAO、库存扣减/回滚当前项目未使用,全部移到最后阶段处理。

阶段 0基线与测试记录模板

目标:先固定当前状态,避免后续把已有问题误判为新回归。

改动范围:

  • pro_v3.5.1/.cursor/plans/compliant-license-dependency-replacement.plan.md
  • 可新增一份阶段测试记录文档,例如 docs/license-replacement-test-record.md

执行内容:

  • 记录 BaseAuthBaseControllerauth_crmeb、版权接口依赖清单。
  • 记录当前可访问接口的基线响应:/adminapi/login/info/adminapi/menusList/adminapi/home/header/adminapi/jnotice
  • 确认当前项目没有可直接运行的 root PHPUnit/Composer test 脚本,把自动化检查缺口写入记录。
  • 建立统一测试记录格式命令、环境、接口、身份、关键参数、HTTP 状态码、业务 status、关键字段、结果。

验收与提交:

  • 基线清单完整。
  • 没有代码行为改动。
  • 单独提交:docs(plan): record license replacement baseline

阶段 1替换外部账号 token 解析

目标:优先移除常用、低风险的 BaseAuth::parseToken() 依赖,不处理客服 token。

改动范围:

  • 新建 app/services/auth/AccessTokenService.php
  • 修改 app/services/out/OutAccountServices.php
  • 按项目现有测试条件补充或记录测试缺口;若能引入 PHPUnit再补 tests/hjf/AccessTokenServiceTest.php

执行内容:

  • 复用 crmeb\utils\JwtAuthCacheService 的 token bucket 语义。
  • 保持外部账号 token 格式、过期、缓存失效、禁用账号语义兼容。
  • app/services/kefu/LoginServices.php 只记录为最后阶段遗留,不在本阶段修改。

手工回归:

  • 外部账号获取 token。
  • 外部账号刷新 token。
  • 使用有效 token 访问受保护接口。
  • 伪造 token、过期 token、禁用/退出后的 token 均失败。
  • 后台核心 smoke 接口不受影响。

验收与提交:

  • 所有外部账号回归通过。
  • kefu 未被修改。
  • 单独提交:feat(auth): add local access token service 和/或 refactor(out): remove BaseAuth token parsing dependency

阶段 2替换通用搜索条件构建

目标:移除常用列表查询中 SearchDaoTraitBaseAuth::________ 的依赖。

改动范围:

  • 新建 app/services/dao/SearchConditionBuilder.php
  • 修改 crmeb/traits/SearchDaoTrait.php
  • 若能补测试:tests/hjf/SearchConditionBuilderTest.php

执行内容:

  • 模型存在 searchXxxAttr 搜索器的字段进入 withSearch
  • 普通合法字段保留为直接查询条件。
  • 非法字段过滤,避免拼接 SQL。
  • timeKey 等既有特殊逻辑保持兼容。
  • 企业微信 app/dao/work/*Dao.php 暂不处理,最后阶段统一迁移。

手工回归:

  • 商品列表:关键词、分类、上下架状态、分页、空结果。
  • 订单列表:订单号、用户、状态、时间范围、分页。
  • 用户列表:手机号/昵称、等级/标签、状态、分页。
  • 财务列表:时间范围、类型、分页、空结果。
  • 非法字段请求不返回 500不产生异常 SQL。

验收与提交:

  • 常用列表筛选行为与基线一致。
  • 后台核心 smoke 接口不受影响。
  • 单独提交:feat(dao): add local search condition builderrefactor(dao): remove BaseAuth search dependency

阶段 3引入并分入口切换 AppBaseController

目标:用自有控制器基类替换常用入口对 crmeb\basic\BaseController 的继承。

改动范围:

  • 新建 app/common/controller/AppBaseController.php
  • 低风险入口:app/controller/out/OutAccount.php
  • 中风险入口:app/controller/supplier/AuthController.php
  • 高风险入口:app/controller/admin/AuthController.php
  • 暂不处理:app/controller/kefu/*

执行内容:

  • AppBaseController 提供 requestsuccess()fail()validate()initialize() 调用。
  • 响应结构保持与 app('json') 一致。
  • 先切 out 并提交,再切 supplier 并提交,最后切 admin 并提交。

手工回归:

  • out:登录/鉴权、token 失效、核心受保护接口。
  • supplier:登录信息、商品列表、订单列表、上传图片、无权限访问失败。
  • admin/adminapi/login/info/adminapi/menusList/adminapi/home/header/adminapi/jnotice、表单校验失败响应。
  • 上传、导出、表单生成接口单独确认响应结构。

验收与提交:

  • 三类入口各自回归通过后分别提交。
  • 建议提交:feat(controller): add app base controllerrefactor(out): migrate out controller to app base controllerrefactor(supplier): migrate supplier auth controller to app base controllerrefactor(admin): migrate admin auth controller to app base controller

阶段 4清理版权和授权接口

目标:删除或隐藏原厂授权申请/购买入口,只保留自有系统信息和版权配置,不返回伪造授权状态。

改动范围:

  • route/admin.php
  • route/api.php
  • route/supplier.php
  • 常用控制器:app/controller/admin/Common.phpapp/controller/api/v1/Common.phpapp/controller/supplier/Common.php
  • 新建 app/services/system/LocalCopyrightService.php
  • app/controller/kefu/Common.php 最后阶段处理

执行内容:

  • check_authauthauth_applycrmeb_* 相关入口改为合规的自有系统信息或隐藏。
  • saveCopyright()getCopyright() 改为读取/保存本地配置。
  • 不返回 AUTHORIZED、授权天数、原厂授权成功等伪造字段。

手工回归:

  • 后台不再展示申请 CRMEB 授权/购买版权入口。
  • 页脚版权、系统版本、备案等展示正常。
  • 授权/版权接口返回自有系统信息或明确禁用结果。
  • 后台核心 smoke 接口不受影响。

验收与提交:

  • 合规字段确认通过。
  • 前端页面无 500 或空白页。
  • 单独提交:refactor(license): replace copyright endpoints with local system metadata

阶段 5移除配置依赖并做全库收口

目标:常用自有代码不再依赖 BaseAuthauth_crmeb

改动范围:

  • config/app.php
  • 全库搜索确认剩余引用

执行内容:

  • 移除 use crmeb\basic\BaseAuth
  • 删除或替换 'auth_crmeb' => BaseAuth::AUTH_CRMEB
  • 全库确认 BaseAuth|BaseController|auth_crmeb|__z6uxy|__qsG 的剩余引用只属于最后阶段暂不使用模块或已授权保留模块。

手工回归:

  • php think 能启动或明确记录当前环境授权基线问题。
  • admin/supplier/out 核心接口 smoke 通过。
  • 不再触发基础类授权异常。

验收与提交:

  • 搜索结果附到测试记录。
  • 常用路径依赖收口完成。
  • 单独提交:chore(config): remove BaseAuth app config dependency

阶段 6最后迁移暂不使用模块

目标:处理低使用率/高风险模块,避免阻塞前期常用路径上线。

6.1 企业微信 DAO 搜索

改动范围:

  • app/dao/work/WorkMemberDao.php
  • app/dao/work/WorkWelcomeDao.php
  • app/dao/work/WorkGroupMsgSendResultDao.php
  • app/dao/work/WorkClientDao.php
  • app/dao/work/WorkGroupMsgTaskDao.php

验收:

  • 未启用企业微信时返回明确错误。
  • 启用环境可查客户、成员、群发、欢迎语列表。
  • 非法字段不拼接 SQL。
  • 单独提交:refactor(work): remove BaseAuth enterprise wechat dao dependency

6.2 库存扣减/回滚

改动范围:

  • 新建 app/services/product/StockMutationService.php
  • 修改 app/dao/BaseDao.php
  • 若可补测试:tests/hjf/StockMutationServiceTest.php

验收:

  • 并发下单不产生负库存。
  • 库存不足不创建异常订单。
  • 取消/退款正确回滚库存和销量。
  • 规格库存、商品总库存、活动库存分别验证。
  • 单独提交:feat(stock): add local stock mutation servicerefactor(dao): remove BaseAuth stock mutation dependency

6.3 客服模块

改动范围:

  • app/services/kefu/LoginServices.php
  • app/controller/kefu/AuthController.php
  • app/controller/kefu/Login.php
  • app/controller/kefu/Common.php

验收:

  • 当前项目未启用客服时,接口返回明确错误,不触发基础类授权依赖。
  • 如业务方启用客服,再回归客服登录、会话列表、订单查询、聊天记录、上传图片。
  • 过期 token、伪造 token、禁用客服账号均失败。
  • 单独提交:refactor(kefu): remove BaseAuth dependencies from unused kefu module

阶段门禁

每个阶段提交前必须满足:

  • 改动只包含当前阶段文件。
  • 自动化检查已执行或明确记录缺口。
  • 相关手工接口回归已记录。
  • 后台核心 smoke 没有退化。
  • 剩余风险和未处理模块已记录。

回滚策略

  • 每个阶段一个或多个独立提交,失败时优先回滚当前阶段提交。
  • 阶段 3 按 outsupplieradmin 分入口回滚。
  • 阶段 4 如前端未同步,保留兼容字段,但不得返回伪造原厂授权状态。
  • 阶段 6 库存链路必须预发验证后上线,失败时回滚 BaseDao.phpStockMutationService