开发检查清单
本页用于二开、插件开发和发版前自查。重点是多租户隔离、权益控制、插件兼容和移动端构建。
后端模块
新增或修改后端业务时:
- Controller 只做请求接收、参数校验和调用 Service。
- Service 负责编排业务、事务和事件,不直接拼接跨层查询。
- Repository 负责数据访问,租户级查询必须使用
$this->query()。 - Model 只保留 ORM 映射、关联、访问器和修改器。
- 租户级数据表必须包含
tenant_id,并建立必要索引。 - 写操作需要考虑
grace、frozen状态下的中间件拦截。 - 需要套餐控制的功能,后端必须调用
TenantFeatureService::requireFeature()。 - 文件上传前调用配额校验,上传成功后消费配额,删除确认后释放配额。
- 金额字段使用整数分,支付回调必须幂等。
- 重要副作用通过事件 Listener 处理,例如通知、日志和缓存清理。
前端模块
新增平台端或租户端页面时:
- API 封装放在
src/api/{module}.ts。 - 页面放在
src/views/{module}/index.vue。 - 复用分页、搜索和弹窗逻辑时优先使用
useListPage、usePaging、useFormDialog。 - 按钮级权限使用
v-has-perm,不要只依赖路由隐藏。 - 租户套餐功能入口使用
v-feature,并确保后端有同名守卫。 - 动态菜单页面要确认后端菜单
component与前端文件路径一致。 - 租户端需要展示生命周期限制时,复用用户 store 中的 SaaS 状态。
- 表单提交要处理重复点击,可使用现有锁函数或页面内 loading。
插件开发
插件提交前检查:
plugin.json位于插件根目录,code唯一且使用 kebab-case。kind=app必须声明tenant.menus,kind=plugin可只提供配置面板或能力接口。entitlement与套餐授权 code 一致。psr4命名空间和目录匹配。- 插件路由不要手写
/tenantapi/{code}前缀,框架会自动挂载。 - 租户级表包含
tenant_id,Repository 使用$this->query()。 - 菜单 code、权限 code、表名、路由名不能和其他插件冲突。
- 数据库迁移可重复执行,失败时不会留下不可恢复的半安装状态。
- 生命周期 hook 不承担表结构变更,表结构统一放迁移。
- zip 包不包含
node_modules、缓存、构建产物、绝对路径或../。 - 有移动端页面时,manifest 声明
uniapp.pages,并提供对应源码目录。
移动端与装修
涉及 UniApp 或装修时:
- 插件分包路径保持稳定,避免升级后破坏已发布链接。
uniapp.pages中的 path 与插件uniapp/源码实际路径一致。- 插件页面需要登录时,使用主壳已有认证和请求封装。
- TabBar 只放高频入口,插件入口优先通过首页组件、导航宫格或插件中心暴露。
- 装修组件字段要提供默认值,旧版本装修数据升级后也能渲染。
- 插件装修组件需要后端补数据时,hydrator 要检查租户权益和数据边界。
- 仅修改装修内容不需要移动端重新构建;新增分包页面或 TabBar 结构才需要构建。
多租户红线
以下情况必须在代码评审中拦截:
- 租户业务直接使用
Db::table()查询租户级表,却没有明确追加tenant_id。 - Repository 绕过
$this->query()直接使用 Model 静态查询。 - 通过请求参数接收
tenant_id并信任它。 - 平台接口复用租户接口 token 或中间件。
- 前端隐藏按钮但后端没有权限或功能校验。
- 插件 API 只检查插件安装状态,没有检查租户权益和启用状态。
- 文件删除失败时仍释放存储配额。
- 支付回调未校验签名、金额、订单状态或重复通知。
本地验证命令
后端:
bash
cd server
composer test只跑红线测试:
bash
cd server
./vendor/bin/phpunit tests/RedLine平台前端:
bash
cd platform
pnpm type-check
pnpm test租户前端:
bash
cd tenant
pnpm type-check
pnpm testPC 前台和 UniApp:
bash
cd pc
pnpm build
cd ../uniapp
pnpm type-check
pnpm build:h5插件前端同步:
bash
node scripts/sync-plugins.mjs --target platform
node scripts/sync-plugins.mjs --target tenant
node scripts/sync-plugin-uniapp.mjs发版前检查
- 数据库迁移和插件迁移已在空库、旧库各跑一次。
saas:install在新环境可以完成。- 平台管理员可登录,租户管理员可登录。
- 租户创建、续费、支付回调、生命周期扫描可用。
- 套餐功能、插件授权、租户启用、RBAC 都能共同生效。
- H5 或小程序构建至少成功一次。
CHANGELOG.md和文档已同步更新。
