Files
rxthinkcmf-wiki/RXThinkCMF_Laravel13_NaiveVue/zh/standards/code-review.md
T
2026-10-08 17:50:29 +08:00

3.5 KiB
Raw Blame History

12.5 代码审查清单

:::tip 概述 代码审查(Code Review)是保证代码质量的重要环节。以下清单涵盖后端和前端的审查要点。 :::

后端审查清单

Model 层

  • 继承 Eloquent Model(业务模型位于 app/Models/)
  • protected $table 显式指定表名(含前缀或与 DB_PREFIX 推导一致)
  • 引入 SoftDeletesByFlag(is_delete 软删除)与 HasAuditColumns(审计字段)Trait
  • $fillable 白名单完整(批量赋值字段)
  • 关联关系定义正确(如有)
  • 无硬编码的数据库前缀

Service 层

  • 继承正确的基类(BaseService 或 BaseTenantService,树形模块不参与租户隔离)
  • $modelClass 配置正确
  • Trait 组合按需(HasCrudOperations / HasQueryScopes / HasSerializeMaps / HasUniqueCheck / HasFileProcessing)
  • 查询条件配置合理(pageLikeFields / pageEqFields)
  • 排序配置合理(pageOrderBy / orderFieldAllow 白名单)
  • 唯一性校验配置(uniqueFields)
  • 枚举映射配置(serializeMaps)
  • 文件字段配置(fileFields / fileSaveDir)
  • 钩子方法中无 SQL 注入风险(使用查询构造器参数绑定)
  • 写操作在事务中执行(HasCrudOperations 已用 DB::transaction 包裹,自定义逻辑需补充)

Controller 层

  • 位于 app/Http/Controllers/Api/,瘦控制器(参数获取 → 调 Service → 返回 JSON)
  • 通过构造函数注入 Service(不手动 new)
  • 所有接口标注 #[Permission] 注解
  • 所有写操作标注 #[OperationLog] 注解
  • 权限码格式正确(sys:模块名:操作)
  • 返回值类型为 JsonResponse,使用基类 success/fail/paginate/_page 等方法
  • 参数格式校验由 FormRequest 完成(不在控制器手写校验)

FormRequest

  • 继承 BaseRequest(failedValidation 统一抛出 code=1 响应)
  • rules() 覆盖全部必填与格式字段
  • 场景区分(add / update)

安全

  • 无 SQL 注入风险(使用 ORM / 查询构造器参数绑定)
  • 无 XSS 风险(输出转义)
  • 敏感数据不暴露(password、salt 不在响应字段中)
  • 文件上传有类型和大小限制(config/file.php + FormRequest)
  • 权限校验覆盖所有接口(#[Permission])

前端审查清单

API 模块

  • 函数命名规范(getXxxPage / xxxAdd / xxxUpdate / xxxDelete)
  • HTTP 方法正确(GET/POST/PUT/DELETE)
  • 参数传递方式正确(params / data)
  • 错误处理完善(响应拦截器统一处理,业务代码不重复 catch)

页面组件

  • 使用 <script setup lang="ts"> 语法
  • Props 有类型定义
  • 表单有验证规则
  • 删除操作有确认弹窗
  • 加载状态处理(loading)
  • 空数据处理

权限

  • 按钮级权限使用 v-perm 指令(如 v-perm="['sys:example:add']",多权限全满足用 v-perms)
  • 权限码与后端 #[Permission] 注解一致

性能

  • 列表数据分页加载
  • 图片懒加载
  • 组件按需引入

Git 提交审查

  • commit message 格式正确(见 12.3 Git 提交规范)
  • 一个 commit 只做一件事
  • 无调试代码残留(console.log、dd、dump)
  • 无敏感信息泄露(密码、密钥、.env)
  • 通过 vendor/bin/pint --test(后端风格)与 pnpm lint:eslint(前端风格)