从零搭建一个应用
一句话:不写一行代码,用数据模型 → 表单设计 → 发布 → 授权四件事,把一张业务表变成一个能登录使用的应用。读完约 20 分钟,全程只用四个页面。
演示环境里已经有成品,先看效果再动手
「文档演示-设备台账」就是本篇的成品状态:数据模型 biz_doc_device、表单 doc_device_ledger、3 行演示数据。现在用 docadmin / admin123 登录,打开 基础设施 → 在线示例 → 文档演示-设备台账,看到的就是第 6 步里的运行时页面;再照下面六步在自己租户里复刻一遍。
功能在哪
| 页面 | 菜单路径 | 本教程用它干什么 |
|---|---|---|
| 数据模型 | 基础设施 → 数据管理 → 数据模型 | 建业务表(biz_ 前缀 + 多租户表策略),看建表 DDL 日志 |
| 表单设计 | 基础设施 → 在线开发 → 表单设计 | 四步设计器画表单与列表,首次发布生成运行时菜单 |
| 角色资源授权 | 系统管理 → 组织权限 → 角色管理 → 资源授权 | 把这张表单授给角色(两处,见第 5 步) |
| 运行时页面 | 基础设施 → 在线示例 → 表单名 | 最终成品:列表 + 新增/编辑/详情/删除/导入/导出 |
常用操作
第 1 步:建数据模型
- 打开 数据模型,点「新建」;
- 「表名」填
biz_doc_device——业务表必须以biz_开头,这是和系统表隔离的硬约定,填别的会被校验拦下; - 「模型名称」填给人看的名字(本例「文档演示-设备台账」);
- 表策略选多租户表:平台会自动带上租户列,不同租户的数据天然互不可见;
- 字段可以先用「快速添加」把
name / code / status / remark四个常用字段补上,保存。

保存只是登记模型,还没有真建表
物理表要等表单首次发布时才执行建表 DDL。所以这一步保存完去查数据库是查不到 biz_doc_device 的,别以为没保存上。
第 2 步:表单设计器四步走
在 表单设计 里「新增」一张表单(编码本例 doc_device_ledger),进入设计器,顶部是四个步骤:
- 基础设置:表单名称、分类;
- 数据绑定:选第 1 步的主表
biz_doc_device; - 表单设计:切到「字段映射」页签,点蓝色按钮「从 biz_doc_device 一键生成字段」——四个字段连同控件类型一次铺好,再按需拖拽调整;
- 列表设计:决定运行时列表显示哪几列。

第 3 步:首次发布
回到 表单设计 列表,行内点「发布」。首次发布的弹窗比之后多一块蓝条提示和两个必填项:
- 「上级菜单」:运行时页面挂到哪个菜单下,本例选 在线示例;
- 「菜单排序」与「变更说明」照实填。
点「确认发布」后,平台一次做完四件事:执行建表 DDL、创建运行时菜单、创建 7 个按钮权限(查询/新增/修改/删除/导出/导入/被引用)、把表单登记为数据集资源(行级/列级/字段级权限从此可配)。

发布成功后列表的「线上版本」从 - 变成 v1:

改完不发布 = 没改
运行时页面读的是线上版本。在设计器里改了字段或列表,必须再点一次「发布」(版本号 +1)才会生效;「版本」里可以回滚到任意历史版本。
第 4 步:核对产物
回到 数据模型,按表名搜 biz_doc_device,行内点「DDL日志」:两条建表语句都是「执行成功」,说明第 3 步的 DDL 真的落库了。


第 5 步:给角色授权(要点两次,缺一不可)
打开 角色管理,在目标角色(本例 doc_tenant_admin,即 docadmin 所属角色)行点「资源授权」。这张表单在资源树里是两个同名节点,要各授一次:
| 要授的节点 | 怎么认 | 授什么 | 决定什么 |
|---|---|---|---|
类型标记「数据集」,权限串 infra:form-design-run:doc_device_ledger | 带完整权限串 | 7 个动作(查看/新增/修改/删除/导出/导入/被引用查询)全部「允许」 | 接口与按钮:能不能查、增、改、删 |
| 类型标记「菜单」,权限串为空 | 与表单同名但没有权限串 | 动作「查看」+ 效果「允许」 | 左侧导航里出不出现这个页面 |
先按「权限标识」搜 doc_device,看到的是数据集那一行的 7 条动作授权:

再按「资源名称」搜「文档演示」,第 1 行权限标识是 - 的那条,就是菜单派生行的授权:

配第二条时,在「新增授权」抽屉的资源树里搜「文档演示」,两个同名节点并排:带权限串的是数据集,不带的是菜单——点后者,动作保持「查看」、效果「允许」,确定。

只授数据集的 7 个动作,他会「有权限但没菜单」
实测:只授 7 个动作时,角色直达运行时路由能打开页面、接口也放行,但左侧导航里没有这个页面(菜单可见性只认「菜单派生」那一行资源的授权)。表现是「我明明授了权,他怎么找不到入口」,而且不报任何错。补上菜单行的「查看/允许」后,导航立即出现(约 30 秒缓存)。超管不受影响:超管默认看到全部菜单、拥有全部权限。
为什么老表单不用点两次
发布早于「权限塌缩」的表单(如在线示例里的「校验示例4」)在资源树里是 7 个独立的按钮资源,各自带着菜单关联,授其中任意一条,平台就沿菜单父链把入口补出来。新发布的表单塌缩成一行数据集资源,菜单关联落在上面说的「菜单」行上,所以要单独授一次。两种形态的判定细节见角色资源授权。
没授权的人:页面进不去,但新形态表单的数据接口是放行的
用 salesman01(没被授这张表单的任何资源)实测两件事:地址栏直达运行时路由,前端落在 404 页(「抱歉,您访问的页面不存在」——路由守卫按菜单可见性拦,不是 403 页);但直接调这张表单的数据分页接口,返回 200 和全部 3 行——塌缩族只有一行 DATASET 身份资源、默认效果「允许」,链上没有任何授权时判定回落成放行。要让它真拒,给 :query 这类动作补一条显式「拒绝」(老形态表单天生带这条动作行、默认拒绝,所以老表单是显式拒绝)。AI 助手会把这条敞开的路原样走一遍给你看,现场对照见让 AI 助手安全读写业务数据第 5 步。
第 6 步:登录验证「自己搭的应用真的能用」
用 docadmin / admin123 登录,打开 基础设施 → 在线示例 → 文档演示-设备台账:左侧导航里能看到它(第 5 步第二条授权的产物),列表 3 行演示数据,行内「编辑/详情/删除」齐全,顶部「新增」可点(7 个动作授权的产物)。

点「新增」,弹出的就是第 2 步设计的那张表单:

到这一步,一个应用就搭完了。接下来想让它「分人看」,直接接配置行级数据权限——第 3 步登记的数据集资源就是它的入口。
视角对照
| 视角 | 看到这个应用时的表现 |
|---|---|
超管 admin | 发布后即可用:全部菜单 + 全部权限,不需要任何授权 |
租户管理员 docadmin | 完成第 5 步两处授权后可用(本篇截图视角) |
普通员工 salesman01 | 无此菜单;直达路由落在 404 页;数据接口放行(塌缩族默认效果允许,见第 5 步后的 danger) |
套餐受限租户 aoteman@test | 无此菜单:运行时菜单建在租户 1 的菜单树下,跨租户不可见 |
进阶
- 数据模型:表策略、索引、DDL 日志的完整读法;
- 表单设计:四步设计器、字段校验、版本与回滚;
- 表单运行时:列表列设置、脱敏、自定义按钮;
- 角色资源授权:批量授权、智能查看、权限塌缩的判定口径;
- 配置行级数据权限:给这个应用加「只看自己的数据」等行/列/字段级限制。
常见问题
Q:表名填了 doc_device 被拦下? A:业务表必须 biz_ 前缀。这个约定让业务表与系统表在命名上就分开,数据模型列表、DDL 日志、权限登记都靠它识别。
Q:发布成功了,但数据模型里搜不到这张表? A:搜的时候表名要带前缀(biz_doc_device);再不行看 DDL 日志——发布时建表失败会在那里留下失败记录与原因。
Q:资源树里两个同名节点,授错了会怎样? A:授成「菜单行 × 7 个动作」不会报错,但接口仍无权(动作判定走数据集行);授成「数据集行 × 查看」则接口通、菜单不出现。认节点看类型标记和有没有权限串,别只看名字。
Q:设计器里改了字段,运行时没变? A:没重新发布。运行时读线上版本,改完要点「发布」让版本号 +1;怀疑版本不对就在「版本」里看当前线上版本是哪一版。
Q:授权改完多久生效? A:动作与菜单层面有约 30 秒缓存。验证时退出重登最稳妥,别改完立刻刷新就下结论。
