跳到主要内容

白标与品牌

租户可以使用自己的品牌呈现控制台。在整个租户控制台会话中,徽标、配色和产品标题替代 DeviceChain 默认值。白标属于开源核心,无需独立版本,因此你可以运行一个实例,让每个客户租户看到自己的品牌。

状态

已提供:品牌级联(租户 → 运维人员默认值 → 内置基础值)、控制台**品牌(Branding)**编辑器、逐字段继承,以及通过对象存储或内联/外部引用存储徽标。 计划中:租户专属登录页面外观、favicon,以及自定义域名到租户品牌的解析。在此之前,登录页显示内置的 DeviceChain 品牌,而不是运维人员默认值。参见品牌级联。

这里的白标指品牌外观,而不是为每个租户分叉应用。所有租户的菜单、文案和翻译都相同。

品牌级联​

品牌按每个字段沿回退链解析,最具体的值优先:

  1. 租户覆盖值:租户自己保存的品牌字段。
  2. 运维人员默认值:运维人员通过系统设置配置的实例级默认值,适用于未覆盖该字段的所有租户。
  3. 内置基础值:编译进平台的标准 DeviceChain 外观,确保无需任何配置也能完成级联解析。

没有设置任何内容的租户继承运维人员默认值。运维人员没有设置时,使用内置基础值。清空租户字段后,该字段重新继承,编辑器会逐字段显示值是显式设置还是继承而来。

服务器负责解析级联,因此所有客户端(控制台和嵌入应用)看到的实际品牌都一致。

登录页无法使用级联。登录前尚未确定租户,只有选定租户后才应用品牌,因此登录页显示内置 DeviceChain 品牌。

可自定义字段​

显示位置字段
标题浏览器标签页中的产品名称(文档标题)
徽标替换控制台页头中的图片,并可设置最大高度
配色四种颜色——主色、背景色、前景色、强调色——作为 CSS 自定义属性应用于应用根节点

控制台完全通过设计令牌设置主题,因此配色只有一个修改入口,无需自定义 CSS:

  • 主色和强调色调整应用的设计令牌(按钮、焦点环和强调元素)。
  • 背景色和前景色只改变带品牌样式的侧边栏框架。页面主体保留其浅色/深色主题。

平台有意不提供任意 CSS 注入。与完善的配色方案相比,其收益有限,却带来 XSS 和维护风险。

徽标存储​

徽标是不透明引用,可通过三种方式解析:

  • 上传:保存在对象存储中,通过按租户授权的代理路径流式返回,绝不使用公开 URL。
  • 内联:大小受限的 data: URI(≤ 256 KB),直接保存在品牌记录上,适用于没有额外基础设施的安装。
  • 外部 URL:租户自行托管的 https:// 资源。

服务器在存储前验证上传和内联图像:只允许栅格图像类型,并强制执行大小上限。

品牌保存在哪里​

品牌是租户控制平面记录上的一组带类型、可为空的列。它不是 JSON 数据块,绝不放入 JWT:令牌只携带认证信息。

控制台通过限定于自身租户的 tenant 查询读取已解析品牌,这是其常规启动查询。结果按租户缓存,采用先使用缓存再重新验证的方式:首先显示缓存值,每次加载时再重新获取并替换。因此,品牌变更会及时显示。

解析后的品牌还带有 updatedAt。无论租户覆盖值还是运维人员默认值发生变化,它都会改变,因此维护自身缓存的客户端可以将该值作为缓存键。

编辑品牌​

在控制台租户平面的**品牌(Branding)**页面编辑,需要 branding:write 权限。

主题字段(标题、配色、徽标高度)作为原始覆盖值一起保存。徽标单独管理,其操作立即生效,因此替换主题绝不会清除已上传的徽标。

对应的 GraphQL 变更操作:

  • setTenantBranding 写入调用方自己租户的主题覆盖值。空值清除该字段,使其重新继承。
  • setTenantLogo 设置或清除徽标引用。上传通过专用端点写入对象存储。

两者只作用于调用方令牌中的租户。两者都会验证输入,在存储前拒绝所有无效内容。

另请参见多租户,了解该记录依附的租户模型;以及对象存储,了解上传资源保存的位置。