TanzCMS开源CMS系统

后台开发规范

后台菜单、权限、CRUD、编辑页、排序和状态开关开发规则

更新:2026-05-31 03:20:44 浏览:4

后台开发规范

后台页面要保持一致的菜单、权限、列表、表单和交互方式,避免每个模块各写一套管理体验。

一、菜单声明

模块或插件菜单应在自身 manifest 中声明,核心只负责读取、合并和显示。

{
  "menus": [
    {
      "top": "content",
      "group": "content.demo",
      "group_title": "示例模块",
      "group_icon": "file",
      "id": "module.demo.item",
      "title": "示例数据",
      "url": "modules/demo/items",
      "permission": "module.demo.item",
      "sort": 10
    }
  ]
}

二、权限命名

权限命名按来源分组:

module.demo.item
module.demo.item.create
module.demo.item.update
module.demo.item.delete

plugin.demo.settings
plugin.demo.settings.update

页面权限控制入口,动作权限控制保存、删除、排序和状态切换。

三、列表接口

列表接口返回结构化 JSON:

return response()->json([
    'code' => 0,
    'msg' => '',
    'count' => $page->total(),
    'data' => $page->items(),
]);

列表只返回当前页需要的轻字段。详情、正文、大 JSON 和附件组进入编辑接口或详情接口再读取。

四、编辑页

复杂编辑推荐使用独立编辑页,列表页只负责新增、编辑、删除、排序和状态。

独立编辑页适合:

  • Markdown 文档。
  • 富文本内容。
  • 多 Tab 表单。
  • 复杂配置。
  • 需要预览的页面。

五、保存接口

保存接口必须做验证:

$data = $request->validate([
    'title' => ['required', 'string', 'max:120'],
    'sort' => ['nullable', 'integer', 'min:0'],
    'status' => ['nullable', 'boolean'],
]);

不要信任前端传入的 ID、权限、排序字段和状态值。

六、状态和排序

状态开关和排序保存属于高频操作,应单独提供轻量接口。保存后如果会影响前台输出、菜单或模板标签结果,应清理对应缓存。

七、资源引用

模块后台资源发布到:

public/assets/modules/{code}/

插件后台资源发布到:

public/assets/plugins/{code}/

源码仍保留在模块或插件目录,不把 public 发布目录当源码维护入口。

八、禁止事项

  • 不在后台页面直接输出未转义用户输入。
  • 不绕过管理员认证和权限校验。
  • 不把模块业务页面模板放进核心后台模板目录。
  • 不为单个模块改公共后台 JS,除非是在补通用能力。
  • 不让插件禁用后后台菜单仍指向不可用控制器。