系统设置
系统设置是运维人员为所有租户统一设置的实例级值。一共有四项,位于管理控制台的**设置(Settings)**中。它们的优先级都低于租户自己的配置:没有设置任何值的租户使用实例默认值;设置了自身值的租户则不会使用该默认值。
| 键 | 决定什么 | 说明位置 |
|---|---|---|
basemap.default | 每个租户最初使用的地图瓦片 | 底图 |
branding.default | 实例的标题、徽标和配色 | 白标 |
entity.token_masks | 控制台生成的所有令牌的格式 | 下文 |
locale.default | 控制台打开时使用的语言 | 下文 |
读取设置需要 settings:read,写入需要 settings:write。两者都是运维人员级权限,不属于任何租户角色。已登录用户无需这两项权限,即可读取以下内容:
tokenMasks查询:只提供实际生效的令牌模板映射,使每个控制台创建表单都能生成令牌。- 租户实际生效的品牌、底图和语言:租户对象已经将这些值与实例默认值合并后提供。
所有设置写入都必须遵守的规则
以下三条规则按顺序适用于全部四个键:
- 键必须是上表中的四个之一。 可用键是封闭集合。未知键会被拒绝,而不是创建新的设置;拒绝发生在检查值之前。无法通过 API 添加键。
- 值不得超过 64 KB。 超出时,写入会被拒绝,错误中会指出字节限制(65,536)。限制适用于整个 JSON 文档,而不是某个字段。对于
branding.default尤其重要,因为内联data:徽标原本可能大得多:- 租户的品牌记录允许 256 KB 的内联徽标,因为它保存在带类型的列中,而不是设置中。
- 实例层则受 64 KB 文档限制,约可容纳 48 KB 图像。这一层的控制台徽标字段要求输入
httpsURL,不提供上传;在这个限制下,URL 是实用选择。
- 值必须是有效 JSON。
随后每个键会执行自己的验证,说明见上表链接的页面。
令牌模板
entity.token_masks 决定每个控制台创建表单预填的令牌。每个实体都通过令牌寻址。为每台新设备手动输入令牌既繁琐又容易出错,因此控制台根据模板生成令牌,并允许你在保存前修改。
该设置将实体类型映射到模板。没有专属条目的实体类型使用 default 键:
{
"default": "{slug}",
"device": "dev-{alphanumeric-8}",
"area": "area-{slug}"
}
模板由固定文本和占位符组成:
| 占位符 | 生成内容 |
|---|---|
{slug} | 根据正在输入的名称生成 slug,例如设备名为 "Cold Store Probe" 时,会建议 cold-store-probe |
{uuid} | UUID |
{alphanumeric-N} | N 个随机字母和数字 |
{numeric-N} | N 个随机数字 |
默认配置是 {"default": "{slug}"}。
无论模板生成什么,都必须符合令牌语法,因此某些模板不可能有效。如果模板符合以下任一情况,就会被拒绝:
- 为空;
- 使用未知占位符。
dev-{sulg}会为所有实体静默生成dev-,因为未知占位符不产生任何内容; - 没有任何占位符。所有实体都会得到相同令牌,第一次创建成功,之后全部冲突;
- 声明的宽度超过 128 个字符,无法生成有效令牌;
- 生成的样本不符合令牌语法。
my.device-{slug}会因句点被拒绝,在任何实体使用它创建之前就会发现问题。
最后一项检查说明了为什么要在保存模板时验证,而不是在创建时验证。否则,保存错误模板的运维人员不会发现问题,却会让每个打开创建表单的控制台用户遇到问题。
模板决定控制台建议的内容。手动输入的令牌或集成通过 API 发送的令牌,只需符合令牌语法。写入路径不强制使用模板,修改模板也不会影响现有实体。
默认语言
locale.default 决定尚未自行选择语言的人打开控制台时使用的语言。值是 JSON 字符串中的 BCP-47 语言标签("en"、"es"、"pt-BR"),或默认值 null。
null 不表示“未设置”,而表示没有实例级默认值,由各查看者的浏览器决定。因此,默认控制台会跟随西班牙语浏览器使用西班牙语。在此设置标签会覆盖所有未自行选择语言的用户的浏览器语言,除非其租户设有自身默认值。在控制台中清空字段,会重新存储 null。
控制台按四层优先级选择语言。在设置前请了解顺序,因为这四项系统设置中,只有语言可以由用户覆盖:
- 用户通过语言切换器选择的语言,此处的设置不会改变它。
- 租户管理员在**设置 → 语言(Settings → Language)**中设置的租户默认语言。租户没有设置时,由本设置补充。
- 查看者浏览器请求的语言。
- 英语。
因此,此处的标签只影响原本会使用第 3、4 层的用户:未自行选择语言,且租户没有自身默认值的人。如果设置了标签,已经使用过语言切换器的同事不会看到语言改变。这是有意设计的,也通常是此处修改“没有生效”的原因。
标签检查只验证格式,不检查当前构建是否提供该语言:
- 未知但格式正确的标签会被存储,在提供对应语言目录前不会生效。输入时控制台会提示警告。
- 标签必须以规范形式存储(
es-MX,而不是es-mx)。 - 空字符串会被拒绝,请使用
null。
区域标签会回退到基础语言,因此只提供 es 的构建中,es-MX 会显示西班牙语。