96 lines
3.0 KiB
C#
96 lines
3.0 KiB
C#
using FreeSql.DataAnnotations;
|
|
using F9WebAiTest.Domain.Enums.SYS.RBAC;
|
|
using F9WebAiTest.Domain.Events.SYS.RBAC;
|
|
|
|
namespace F9WebAiTest.Domain.Entities.SYS.RBAC;
|
|
|
|
/// <summary>资源:权限作用的对象,如菜单项、按钮、报表等。</summary>
|
|
[Table(Name = "sys_rbac_menus")]
|
|
public class Menu : AggregateRoot
|
|
{
|
|
[Column(Name = "icon_svg")]
|
|
public string IconSvg { get; private set; } // 图标
|
|
|
|
[Column(Name = "code")]
|
|
public string Code { get; private set; } // 唯一标识
|
|
|
|
[Column(Name = "name")]
|
|
public string Name { get; private set; } // 显示名称
|
|
|
|
[Column(Name = "menu_type")]
|
|
public MenuType_Enum MenuType { get; private set; } // 菜单类型:分组/页面
|
|
|
|
[Column(Name = "assembly_name")]
|
|
public string? AssemblyName { get; private set; }
|
|
|
|
[Column(Name = "type_full_name")]
|
|
public string? TypeFullName { get; private set; }
|
|
|
|
[Column(Name = "parent_id")]
|
|
public long ParentId { get; private set; } // 支持菜单层级
|
|
|
|
[Column(Name = "level")]
|
|
public int Level { get; private set; } // 层级
|
|
|
|
[Column(Name = "is_active")]
|
|
public bool IsActive { get; private set; }
|
|
|
|
[Column(Name = "sort_order")]
|
|
public int SortOrder { get; private set; }
|
|
|
|
[Column(Name = "path")]
|
|
public string Path { get; private set; } = ""; // Web 路由路径
|
|
|
|
[Column(Name = "component")]
|
|
public string Component { get; private set; } = ""; // 前端组件路径
|
|
|
|
[Column(Name = "permission")]
|
|
public string Permission { get; private set; } = ""; // 权限标识,如 sys:user:list
|
|
|
|
public Menu() { }
|
|
|
|
public Menu(long id, string name, string iconSvg, MenuType_Enum menuType = MenuType_Enum.默认,
|
|
string? assemblyName = null, string? typeFullName = null, long parentId = 0, int sortOrder = 0, int parentLevel = 0)
|
|
{
|
|
Id = id;
|
|
Name = name;
|
|
IconSvg = iconSvg;
|
|
MenuType = menuType;
|
|
AssemblyName = assemblyName;
|
|
TypeFullName = typeFullName;
|
|
ParentId = parentId;
|
|
Level = parentId == 0 ? 1 : parentLevel + 1;
|
|
IsActive = true;
|
|
CreatedAt = DateTime.Now;
|
|
SortOrder = sortOrder;
|
|
AddDomainEvent(new Menu_ChangedDomainEvent(Id));
|
|
}
|
|
|
|
public void GenerateNewCode() => Code = $"menu.{DateTime.Now.Ticks}";
|
|
|
|
/// <summary>设置 Web 路由信息(路径/组件/权限码)</summary>
|
|
public void SetWebInfo(string path, string component, string permission)
|
|
{
|
|
Path = path ?? "";
|
|
Component = component ?? "";
|
|
Permission = permission ?? "";
|
|
}
|
|
|
|
public IReadOnlySet<Permission_Type_Enum> SupportedPermissionType =>
|
|
new HashSet<Permission_Type_Enum> { Permission_Type_Enum.Visble };
|
|
|
|
public void SoftDelete() => AddDomainEvent(new Menu_ChangedDomainEvent(Id));
|
|
|
|
public void Activate()
|
|
{
|
|
IsActive = true;
|
|
AddDomainEvent(new Menu_ChangedDomainEvent(Id));
|
|
}
|
|
|
|
public void Deactivate()
|
|
{
|
|
IsActive = false;
|
|
AddDomainEvent(new Menu_ChangedDomainEvent(Id));
|
|
}
|
|
}
|