Skip to content

代码生成器:菜单与权限安装

代码生成器在生成 CRUD 代码后,可通过 Install 服务 自动注册菜单、权限,并写入可复现的 manifest 文件。

流程概览

开发:生成代码 →(可选)自动安装菜单/权限 → 写入 database/seeders/modules/{module}.json
部署:migrate → 仅执行 GeneratedModulesSeeder → 同步菜单/权限
步骤开发环境生产环境
生成代码代码生成器 →「生成代码」随版本发布(Git)
安装菜单/权限保存时自动安装,或点「安装菜单与权限」见下方部署命令
持久化配置database/seeders/modules/*.json 提交 Git同左,随镜像/代码部署

开发环境

1. 配置(代码生成器页面)

Vue(html/)与 React(html-react/)页面能力一致。勾选 树形列表 时:

  • Vue 生成 TreeListPage 树表 + 表单页
  • React 生成树形 Table(展开/收起、无分页、page_size: 1000)+ FormModalparent_id 使用 TreeSelect

树形模块建议在字段中包含 parent_id(及用于展示的名称字段,如 name / title)。勾选树形时后端 Index 无搜索条件返回树形 list,有搜索时返回扁平列表;前端会自动将扁平数据组装为树。

  • 菜单标题:侧边栏显示名(如「文章管理」)
  • 父级菜单:留空 = 顶级;也可挂到「系统管理」等目录下
  • 菜单排序sort 值,越小越靠前
  • 保存时自动安装菜单与权限(默认开启)

2. 生成并安装

  1. 填写模块名、表名、字段
  2. 点击 生成代码(保存文件 + 若勾选则安装)
  3. 或代码已存在时,单独点击 安装菜单与权限

安装完成后:

  • menus / permissions 表写入或更新(按 slug 幂等)
  • 生成 database/seeders/modules/{module_name}.json

3. 本地仅同步 manifest(不跑完整 seed)

bash
go run . artisan db:seed --seeder=GeneratedModulesSeeder

生产环境

命令写法

生产使用编译后的二进制,不要依赖 go run .

bash
# 容器内示例
/www/main artisan db:seed --seeder=GeneratedModulesSeeder

# 裸机示例
./main artisan db:seed --seeder=GeneratedModulesSeeder

Docker 部署可参考 scripts/deploy/seed.sh(默认跑完整 db:seed,见下文注意)。

推荐部署顺序

  1. 发布新代码(含 database/seeders/modules/*.json
  2. ./main artisan migrate
  3. ./main artisan db:seed --seeder=GeneratedModulesSeeder

注意

操作是否建议在生产执行
db:seed --seeder=GeneratedModulesSeeder✅ 可以(幂等,只处理生成器模块)
db:seed(完整)⚠️ 仅适合首次初始化;会跑 Menu/Permission/Admin 等全部 seeder,可能重复初始化基础数据
代码生成器「安装菜单与权限」API✅ 可用,但 manifest 需另存 Git 才便于复现

GeneratedModulesSeeder 已注册在 bootstrap/seeders.go,完整 db:seed 时也会执行;生产增量部署建议只跑单个 seeder,避免误触其他 seeder。

自动生成的权限

根据生成器选项(增/删/改/导出)推导,与前端 PermissionButton 使用的 slug 一致:

能力slug 示例(模块 article
列表article.index
详情article.show
创建article.store
更新article.update
删除article.destroy
导出article.export

API 路径前缀:/api/admin/{table_name}(如 /api/admin/articles)。

实现位置(维护参考)

文件说明
app/services/module_manifest.go从模块名 + 选项构建 manifest
app/services/module_installer.go幂等安装菜单/权限、写 JSON
database/seeders/generated_modules_seeder.go读取 modules/*.json 并安装
POST /api/admin/code-generator/install-module单独安装接口
POST /api/admin/code-generator/save保存代码,install.enabled=true 时附带安装

仍需手动的项

代码生成器不会自动完成以下工作,发布前请对照 硬编码检查清单

  • permission.* / menu.* 中英文 i18n(角色树有 description 兜底,但建议补全)
  • app/utils/operation_title.go 非标准接口的操作日志标题
  • 非超管角色的权限分配
  • 观测、日志等特殊页面的硬编码映射

已有模块补装示例(article)

  1. 打开 开发工具 → 代码生成器
  2. 模块名 article,表名 articles,菜单标题「文章管理」
  3. 点击 安装菜单与权限(无需重新生成代码)
  4. 提交 database/seeders/modules/article.json 到 Git