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; }