AdoTenantMenuSuppression.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334
  1. using SqlSugar;
  2. namespace Admin.NET.Plugin.AiDOP.Entity;
  3. /// <summary>
  4. /// 租户级菜单抑制清单:登记「某菜单全局存在、但指定租户不应看到」的 (TenantId, MenuId) 对。
  5. ///
  6. /// 存在原因:<c>AidopMenuLinkSync.EnsureLinked</c> 每次启动会把 Ai-DOP 种子菜单回填到全部租户的
  7. /// <c>SysTenantMenu</c>,判据仅为「这行还在吗」。因此直接删除 <c>SysTenantMenu</c> 行(无论手工 SQL
  8. /// 还是走 <c>SysTenantService.GrantMenu</c> 页面取消授权)都活不过一次重启。本表给回填逻辑一个
  9. /// 「这是有意取消的,别再补回来」的显式信号,并由启动逻辑强制执行,使抑制在重启后自愈。
  10. ///
  11. /// 边界:只影响本表登记的租户;不改 <c>SysMenu</c> 全局定义,不改 <c>SysRoleMenu</c>。
  12. /// 撤销抑制 = 删除本表对应行并重启,回填逻辑会按原主键把授权补回。
  13. /// </summary>
  14. [SugarTable("ado_tenant_menu_suppression", "租户级菜单抑制清单")]
  15. [SugarIndex("uk_tenant_menu_suppression", nameof(TenantId), OrderByType.Asc, nameof(MenuId), OrderByType.Asc, true)]
  16. public class AdoTenantMenuSuppression
  17. {
  18. [SugarColumn(ColumnDescription = "主键", IsPrimaryKey = true, IsIdentity = true, ColumnDataType = "bigint")]
  19. public long Id { get; set; }
  20. [SugarColumn(ColumnDescription = "租户 Id(SysTenant.Id)", ColumnDataType = "bigint")]
  21. public long TenantId { get; set; }
  22. [SugarColumn(ColumnDescription = "菜单 Id(SysMenu.Id)", ColumnDataType = "bigint")]
  23. public long MenuId { get; set; }
  24. [SugarColumn(ColumnDescription = "抑制原因(为何该租户不应看到该菜单)", Length = 256, IsNullable = true)]
  25. public string? Reason { get; set; }
  26. [SugarColumn(ColumnDescription = "创建时间")]
  27. public DateTime CreatedAt { get; set; }
  28. }