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