namespace LingAdmin.Shared.Models; /// /// 用户实体模型 /// public class User { public int Id { get; set; } public required string Name { get; set; } public required string Email { get; set; } public required string PasswordHash { get; set; } public required string Status { get; set; } public DateTime CreatedAt { get; set; } = DateTime.UtcNow; public DateTime? LastLoginAt { get; set; } public DateTime? UpdatedAt { get; set; } // 关联角色 public ICollection UserRoles { get; set; } = new List(); } /// /// 角色实体模型 /// public class Role { public int Id { get; set; } public required string Name { get; set; } public required string Code { get; set; } public string? Description { get; set; } public bool IsSystem { get; set; } = false; public DateTime CreatedAt { get; set; } = DateTime.UtcNow; public DateTime? UpdatedAt { get; set; } // 关联权限 public ICollection RolePermissions { get; set; } = new List(); public ICollection UserRoles { get; set; } = new List(); } /// /// 权限实体模型 /// public class Permission { public int Id { get; set; } public required string Name { get; set; } public required string Code { get; set; } public string? Description { get; set; } public required string Resource { get; set; } public required string Action { get; set; } public DateTime CreatedAt { get; set; } = DateTime.UtcNow; public ICollection RolePermissions { get; set; } = new List(); } /// /// 用户角色关联表 /// public class UserRole { public int UserId { get; set; } public User User { get; set; } = null!; public int RoleId { get; set; } public Role Role { get; set; } = null!; public DateTime AssignedAt { get; set; } = DateTime.UtcNow; public int? AssignedBy { get; set; } } /// /// 角色权限关联表 /// public class RolePermission { public int RoleId { get; set; } public Role Role { get; set; } = null!; public int PermissionId { get; set; } public Permission Permission { get; set; } = null!; public DateTime AssignedAt { get; set; } = DateTime.UtcNow; } /// /// 刷新令牌实体 /// public class RefreshToken { public int Id { get; set; } public int UserId { get; set; } public User User { get; set; } = null!; public required string Token { get; set; } public DateTime ExpiresAt { get; set; } public DateTime CreatedAt { get; set; } = DateTime.UtcNow; public string? CreatedByIp { get; set; } public DateTime? RevokedAt { get; set; } public string? RevokedByIp { get; set; } public string? ReplacedByToken { get; set; } public bool IsExpired => DateTime.UtcNow >= ExpiresAt; public bool IsRevoked => RevokedAt != null; public bool IsActive => !IsRevoked && !IsExpired; }