66 lines
2.0 KiB
C#
66 lines
2.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_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<long> _permissionIds = [];
|
|
public IReadOnlyCollection<long> 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));
|
|
}
|
|
}
|