using FreeSql.DataAnnotations;
using F9WebAiTest.Domain.Enums.SYS.RBAC;
namespace F9WebAiTest.Domain.Entities.SYS.RBAC;
/// 权限:最小的权限单元,如“查看用户列表”、“导出报表”。
[Table(Name = "sys_rbac_permissions")]
public class Permission : AggregateRoot
{
/// 编号,格式:资源:操作,例如 user:add, report:sales:view
[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()
};
/// 自定义权限码(用于消息订阅等业务权限码与 RBAC 权限码保持一致)
public void SetCode(string code) => Code = code;
}