48 lines
1.8 KiB
C#
48 lines
1.8 KiB
C#
using FreeSql.DataAnnotations;
|
|
using F9WebAiTest.Domain.Enums.SYS.RBAC;
|
|
|
|
namespace F9WebAiTest.Domain.Entities.SYS.RBAC;
|
|
|
|
/// <summary>权限:最小的权限单元,如“查看用户列表”、“导出报表”。</summary>
|
|
[Table(Name = "sys_rbac_permissions")]
|
|
public class Permission : AggregateRoot
|
|
{
|
|
/// <summary>编号,格式:资源:操作,例如 user:add, report:sales:view</summary>
|
|
[Column(Name = "code")]
|
|
public string Code { get; private set; }
|
|
|
|
[Column(Name = "permission_type")]
|
|
public Permission_Type_Enum PermissionType { get; private set; }
|
|
|
|
[Column(Name = "resource_type")]
|
|
public Resource_Type_Enum ResourceType { get; private set; }
|
|
|
|
[Column(Name = "resource_id")]
|
|
public long ResourceId { get; private set; } // 关联资源(菜单、报表等)
|
|
|
|
public Permission() { }
|
|
|
|
public Permission(long id, Permission_Type_Enum permissionType, Resource_Type_Enum resourceType, string resourceIdentity, long resourceId)
|
|
{
|
|
Id = id;
|
|
PermissionType = permissionType;
|
|
ResourceType = resourceType;
|
|
ResourceId = resourceId;
|
|
CreatedAt = DateTime.Now;
|
|
Code = $"{GetResorceTypeIdentity}:{resourceIdentity}:{permissionType.ToString().ToLower()}";
|
|
}
|
|
|
|
public string GetResorceTypeIdentity => ResourceType switch
|
|
{
|
|
Resource_Type_Enum.菜单 => "menu",
|
|
Resource_Type_Enum.报表 => "report",
|
|
Resource_Type_Enum.操作 => "operation",
|
|
Resource_Type_Enum.部门 => "department",
|
|
Resource_Type_Enum.消息订阅 => "subscribe",
|
|
_ => throw new ArgumentOutOfRangeException()
|
|
};
|
|
|
|
/// <summary>自定义权限码(用于消息订阅等业务权限码与 RBAC 权限码保持一致)</summary>
|
|
public void SetCode(string code) => Code = code;
|
|
}
|