Files
lgp-admin-plus-api/.cursor/rules/lgp-pitfalls.mdc
LQ bcf54c2727 初始化
缺陷:主题配色需要优化整体的同风格
2026-08-14 23:21:21 +08:00

41 lines
2.8 KiB
Plaintext
Raw 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.
---
description: LGP 新后端开发约定与全项目群已知陷阱
alwaysApply: true
---
# 开发约定与已知陷阱
## 新后端 lgp-admin-plus-api
- 路由由 `UtilsService::autoRouteRegister()` **反射注册**,继承自 `BaseController` 的方法也会被注册成路由。不需要暴露的继承方法必须用 `@Method NO` 覆盖,否则每个控制器白送一套 `create/update/delete`
- 方法名 camelCase 会转成 kebab-case 路径:`myInfo` → `my-info`
- 缺 `@Method` 注解会注册成 `ANY`,务必显式写 `@Method GET` 或 `@Method POST`
- 响应统一走 `jok` / `jerr`,结构固定 `{code, message, result}`,成功 `code=0`。前端拦截器按 `result` 取数据,**不要用 `data`**
- 业务表 Model 覆盖 `$connection = 'business'`;系统表沿用默认 `mysql`
- 免鉴权 Service 继承 `BaseNotAuthService`,不要像老项目那样硬编码路径白名单
- 鉴权真正发生在 `BaseService::__construct`,绕过 BaseService 的方法就没有鉴权。新代码一律走 BaseService
- `nl_menu` 的 `keep_alive` 与 `affix_tab` 输出到 meta 时是**取反**的,插数据别弄反
- 第三方凭据用 `FieldEncryptService` 加密入库,不回显明文
- **库表变更禁止新建 PHP Migration**:写 `database/sql/<YYYY-MM-DD>/01_名字.sql`(当天序号递增、尽量幂等);系统表同步 `public/nl_admin.sql`,业务表 `cc_*` 只放 sql 目录
## 老项目只读
`lgp-api` / `lgp-wx-api` / `lgp-vben` / `lgp-vben-new` 处于迁移期,除安全修复外不要改动。
查业务逻辑可以读,新功能一律写在 `lgp-admin-plus-api` + `lgp-admin-plus`。
## 已知陷阱
- 老 `lgp-wx-api` 把微信 `session_key` 当 token 直接返回客户端,且 `AuthMiddleware` 先执行控制器再检查 token、只判空不验签。归并时必须改成服务端自签 token
- 老 `lgp-api` 密码是**无盐 sha1**,新后端是 bcrypt靠 `nl_admin.legacy_password` 惰性升级,遗留列有过期时间
- 老 `cc_role.id=1` 不是超管,而新 `nl_role.id=1` 是超管且代码硬判断全量放行。角色迁移必须做 ID 偏移
- 老前端 10 个模块的批量删除在静默 404后端只有 `template` 注册了 `delete-batch`
- `cc_price_sheet` 的 6 个材质列是死 schema`create()` 从不赋值、前端已注释,实际只有 `routine` 在用
- 图片水印不是后端接口,是前端拼 OSS URL 参数 `?watermark/2/text/...`
- 小程序 `baseURL` 硬编码在 `api/interceptor.js` 且靠注释切换,极易把测试地址发上线
- 小程序无分包配置uview-plus 全量进主包
## 安全红线
不要把任何密钥写进源码。老项目里七牛 AK/SK`UploadService.php`)、微信 AppSecret`WeChatService.php`)明文硬编码,
`.env.example` 里还提交了真实数据库密码——这些是待清理的历史欠账,不要照抄这个做法。