| 123456789101112131415161718192021222324252627282930313233343536373839 |
- namespace Admin.NET.Plugin.AiDOP.Infrastructure;
- /// <summary>
- /// S8-CONFIG-GLOBAL-ROW-SEMANTICS-AND-KPI-TARGET-1:S8 配置对象的「平台默认 / 工厂覆盖」统一语义。
- ///
- /// 生效读取顺序:工厂覆盖 > 平台默认。
- ///
- /// 平台默认(tenant_id = 0 且 factory_id = 0):
- /// 租户 / 工厂管理员 <b>只读</b>——不允许 Update / Delete,也不允许在页面上给出最终只会 404 的编辑动作;
- /// 需要调整时走「自定义本工厂」:复制平台默认的业务字段 → 由服务端盖章可信租户 / 工厂 → 存为工厂覆盖行。
- ///
- /// 工厂覆盖(tenant_id / factory_id = 当前可信作用域):
- /// 可编辑、可删除;删除即「恢复平台默认」,平台默认行本身不受影响。
- ///
- /// 平台默认行的维护能力与租户侧维护分离;在没有明确的平台级权限模型之前,
- /// 本层只保证租户侧只读,<b>不为了方便重新开放 global write</b>。
- /// </summary>
- public static class S8ConfigScope
- {
- /// <summary>平台默认行的租户 Id。</summary>
- public const long GlobalTenantId = 0L;
- /// <summary>平台默认行的工厂 Id。</summary>
- public const long GlobalFactoryId = 0L;
- /// <summary>作用域标识:平台默认。</summary>
- public const string Global = "GLOBAL";
- /// <summary>作用域标识:当前工厂覆盖。</summary>
- public const string Factory = "FACTORY";
- /// <summary>是否为平台默认行。</summary>
- public static bool IsGlobal(long tenantId, long factoryId) =>
- tenantId == GlobalTenantId && factoryId == GlobalFactoryId;
- /// <summary>把归属列翻译成作用域标识,供前端按业务语言展示(不暴露 tenantId / factoryId 本身)。</summary>
- public static string Resolve(long tenantId, long factoryId) =>
- IsGlobal(tenantId, factoryId) ? Global : Factory;
- }
|