Skip to content

从零搭建一个应用 ​

一句话:不写一行代码,用数据模型 → 表单设计 → 发布 → 授权四件事,把一张业务表变成一个能登录使用的应用。读完约 20 分钟,全程只用四个页面。

演示环境里已经有成品,先看效果再动手

「文档演示-设备台账」就是本篇的成品状态:数据模型 biz_doc_device、表单 doc_device_ledger、3 行演示数据。现在用 docadmin / admin123 登录,打开 基础设施 → 在线示例 → 文档演示-设备台账,看到的就是第 6 步里的运行时页面;再照下面六步在自己租户里复刻一遍。

功能在哪 ​

页面菜单路径本教程用它干什么
数据模型基础设施 → 数据管理 → 数据模型建业务表(biz_ 前缀 + 多租户表策略),看建表 DDL 日志
表单设计基础设施 → 在线开发 → 表单设计四步设计器画表单与列表,首次发布生成运行时菜单
角色资源授权系统管理 → 组织权限 → 角色管理 → 资源授权把这张表单授给角色(两处,见第 5 步)
运行时页面基础设施 → 在线示例 → 表单名最终成品:列表 + 新增/编辑/详情/删除/导入/导出

常用操作 ​

第 1 步:建数据模型 ​

  1. 打开 数据模型,点「新建」;
  2. 「表名」填 biz_doc_device——业务表必须以 biz_ 开头,这是和系统表隔离的硬约定,填别的会被校验拦下;
  3. 「模型名称」填给人看的名字(本例「文档演示-设备台账」);
  4. 表策略选多租户表:平台会自动带上租户列,不同租户的数据天然互不可见;
  5. 字段可以先用「快速添加」把 name / code / status / remark 四个常用字段补上,保存。

数据模型新建弹窗:表名 biz_doc_device、多租户表策略、快速添加四个常用字段(租户管理员视角)

保存只是登记模型,还没有真建表

物理表要等表单首次发布时才执行建表 DDL。所以这一步保存完去查数据库是查不到 biz_doc_device 的,别以为没保存上。

第 2 步:表单设计器四步走 ​

在 表单设计 里「新增」一张表单(编码本例 doc_device_ledger),进入设计器,顶部是四个步骤:

  1. 基础设置:表单名称、分类;
  2. 数据绑定:选第 1 步的主表 biz_doc_device;
  3. 表单设计:切到「字段映射」页签,点蓝色按钮「从 biz_doc_device 一键生成字段」——四个字段连同控件类型一次铺好,再按需拖拽调整;
  4. 列表设计:决定运行时列表显示哪几列。

表单设计第 3 步:字段映射页签 + 「从 biz_doc_device 一键生成字段」,画布上已生成四个字段(租户管理员视角)

一键生成之后才是设计的开始

生成的字段只保证「能用」:标签取字段注释、控件按类型猜。必填、唯一性、长度、脱敏这些都要在字段属性里补——校验类配置的完整清单见表单设计与表单运行时。

第 3 步:首次发布 ​

回到 表单设计 列表,行内点「发布」。首次发布的弹窗比之后多一块蓝条提示和两个必填项:

  • 「上级菜单」:运行时页面挂到哪个菜单下,本例选 在线示例;
  • 「菜单排序」与「变更说明」照实填。

点「确认发布」后,平台一次做完四件事:执行建表 DDL、创建运行时菜单、创建 7 个按钮权限(查询/新增/修改/删除/导出/导入/被引用)、把表单登记为数据集资源(行级/列级/字段级权限从此可配)。

首次发布弹窗:蓝条提示「首次发布需要选择上级菜单」,上级菜单=在线示例(租户管理员视角)

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

表单设计列表:线上版本 v1,行内 设计/发布/版本/更多(租户管理员视角)

改完不发布 = 没改

运行时页面读的是线上版本。在设计器里改了字段或列表,必须再点一次「发布」(版本号 +1)才会生效;「版本」里可以回滚到任意历史版本。

第 4 步:核对产物 ​

回到 数据模型,按表名搜 biz_doc_device,行内点「DDL日志」:两条建表语句都是「执行成功」,说明第 3 步的 DDL 真的落库了。

数据模型列表:按表名过滤出 biz_doc_device 一行(租户管理员视角)

DDL 日志:两条建表语句均执行成功(租户管理员视角)

第 5 步:给角色授权(要点两次,缺一不可) ​

打开 角色管理,在目标角色(本例 doc_tenant_admin,即 docadmin 所属角色)行点「资源授权」。这张表单在资源树里是两个同名节点,要各授一次:

要授的节点怎么认授什么决定什么
类型标记「数据集」,权限串 infra:form-design-run:doc_device_ledger带完整权限串7 个动作(查看/新增/修改/删除/导出/导入/被引用查询)全部「允许」接口与按钮:能不能查、增、改、删
类型标记「菜单」,权限串为空与表单同名但没有权限串动作「查看」+ 效果「允许」左侧导航里出不出现这个页面

先按「权限标识」搜 doc_device,看到的是数据集那一行的 7 条动作授权:

角色 doc_tenant_admin 的 7 条动作授权:同一数据集资源 × 7 个动作,全部允许(租户管理员视角)

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

按资源名称过滤出 8 条:第 1 行权限标识为空的是菜单派生行(查看/允许),其余 7 条是数据集动作(租户管理员视角)

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

新增授权抽屉:资源树里两个同名节点,类型标记分别是「数据集」与「菜单」;右侧动作=查看、效果=允许(租户管理员视角)

只授数据集的 7 个动作,他会「有权限但没菜单」

实测:只授 7 个动作时,角色直达运行时路由能打开页面、接口也放行,但左侧导航里没有这个页面(菜单可见性只认「菜单派生」那一行资源的授权)。表现是「我明明授了权,他怎么找不到入口」,而且不报任何错。补上菜单行的「查看/允许」后,导航立即出现(约 30 秒缓存)。超管不受影响:超管默认看到全部菜单、拥有全部权限。

为什么老表单不用点两次

发布早于「权限塌缩」的表单(如在线示例里的「校验示例4」)在资源树里是 7 个独立的按钮资源,各自带着菜单关联,授其中任意一条,平台就沿菜单父链把入口补出来。新发布的表单塌缩成一行数据集资源,菜单关联落在上面说的「菜单」行上,所以要单独授一次。两种形态的判定细节见角色资源授权。

没授权的人:页面进不去,但新形态表单的数据接口是放行的

用 salesman01(没被授这张表单的任何资源)实测两件事:地址栏直达运行时路由,前端落在 404 页(「抱歉,您访问的页面不存在」——路由守卫按菜单可见性拦,不是 403 页);但直接调这张表单的数据分页接口,返回 200 和全部 3 行——塌缩族只有一行 DATASET 身份资源、默认效果「允许」,链上没有任何授权时判定回落成放行。要让它真拒,给 :query 这类动作补一条显式「拒绝」(老形态表单天生带这条动作行、默认拒绝,所以老表单是显式拒绝)。AI 助手会把这条敞开的路原样走一遍给你看,现场对照见让 AI 助手安全读写业务数据第 5 步。

第 6 步:登录验证「自己搭的应用真的能用」 ​

用 docadmin / admin123 登录,打开 基础设施 → 在线示例 → 文档演示-设备台账:左侧导航里能看到它(第 5 步第二条授权的产物),列表 3 行演示数据,行内「编辑/详情/删除」齐全,顶部「新增」可点(7 个动作授权的产物)。

运行时页面:左侧导航已出现「文档演示-设备台账」,列表 3 行、行内编辑/详情/删除齐全(租户管理员视角)

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

运行时新增弹窗:一键生成的四个字段(名称/编码/状态/备注)(租户管理员视角)

到这一步,一个应用就搭完了。接下来想让它「分人看」,直接接配置行级数据权限——第 3 步登记的数据集资源就是它的入口。

视角对照 ​

视角看到这个应用时的表现
超管 admin发布后即可用:全部菜单 + 全部权限,不需要任何授权
租户管理员 docadmin完成第 5 步两处授权后可用(本篇截图视角)
普通员工 salesman01无此菜单;直达路由落在 404 页;数据接口放行(塌缩族默认效果允许,见第 5 步后的 danger)
套餐受限租户 aoteman@test无此菜单:运行时菜单建在租户 1 的菜单树下,跨租户不可见

进阶 ​

常见问题 ​

Q:表名填了 doc_device 被拦下? A:业务表必须 biz_ 前缀。这个约定让业务表与系统表在命名上就分开,数据模型列表、DDL 日志、权限登记都靠它识别。

Q:发布成功了,但数据模型里搜不到这张表? A:搜的时候表名要带前缀(biz_doc_device);再不行看 DDL 日志——发布时建表失败会在那里留下失败记录与原因。

Q:资源树里两个同名节点,授错了会怎样? A:授成「菜单行 × 7 个动作」不会报错,但接口仍无权(动作判定走数据集行);授成「数据集行 × 查看」则接口通、菜单不出现。认节点看类型标记和有没有权限串,别只看名字。

Q:设计器里改了字段,运行时没变? A:没重新发布。运行时读线上版本,改完要点「发布」让版本号 +1;怀疑版本不对就在「版本」里看当前线上版本是哪一版。

Q:授权改完多久生效? A:动作与菜单层面有约 30 秒缓存。验证时退出重登最稳妥,别改完立刻刷新就下结论。

相关页面 ​