using FreeSql.DataAnnotations; using F9WebAiTest.Domain.Enums.SYS.RBAC; using F9WebAiTest.Domain.Events.SYS.RBAC; namespace F9WebAiTest.Domain.Entities.SYS.RBAC; /// 角色:一组权限的集合。 [Table(Name = "sys_rbac_roles")] public class Role : AggregateRoot { [Column(Name = "name")] public string Name { get; private set; } // 如 "财务专员", "系统管理员" [Column(Name = "code")] public string Code { get; private set; } // 如:role:xxxx [Column(Name = "sort_order")] public int SortOrder { get; private set; } [Column(Name = "description")] public string Description { get; private set; } [Column(Name = "is_active")] public bool IsActive { get; private set; } private readonly List _permissionIds = []; public IReadOnlyCollection PermissionIds => _permissionIds.AsReadOnly(); public Role() { } public Role(long id, string name, string code, int sortOrder, string description) { Id = id; Name = name; Code = code; SortOrder = sortOrder; IsActive = true; Description = description; CreatedAt = DateTime.Now; } public void Activate() => IsActive = true; public void Deactivate() => IsActive = false; public void AddPermission(long permissionId, Resource_Type_Enum type) { if (!_permissionIds.Contains(permissionId)) _permissionIds.Add(permissionId); if (type == Resource_Type_Enum.菜单) AddDomainEvent(new RoleMenu_ChangedDomainEvent(Id)); else if (type == Resource_Type_Enum.部门) AddDomainEvent(new RoleDepartment_ChangedDomainEvent(Id)); } public void RemovePermission(long permissionId, Resource_Type_Enum type) { _permissionIds.Remove(permissionId); if (type == Resource_Type_Enum.菜单) AddDomainEvent(new RoleMenu_ChangedDomainEvent(Id)); else if (type == Resource_Type_Enum.部门) AddDomainEvent(new RoleDepartment_ChangedDomainEvent(Id)); } }