using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using Abp.Domain.Entities; using Abp.Domain.Entities.Auditing; using Abp.Timing; using VberZero.Authorization; using VberZero.BaseSystem.MultiTenancy; namespace VberZero.BaseSystem.Users; /// /// 存储用户的登录尝试 /// [Table("Sys_UserLoginAttempts")] public class UserLoginAttempt : Entity, IHasCreationTime, IMayHaveTenant { public const int MaxTenancyNameLength = Tenant.MaxTenancyNameLength; public const int MaxUserNameOrEmailAddressLength = User.MaxEmailAddressLength; public const int MaxClientIpAddressLength = 64; public const int MaxClientNameLength = 128; public const int MaxBrowserInfoLength = 512; /// /// 租户的 ID,如果 是有效的租户名称。 /// public virtual int? TenantId { get; set; } [StringLength(MaxTenancyNameLength)] public virtual string TenancyName { get; set; } /// /// 用户 ID,如果 是有效的用户名或电子邮件或手机号 /// public virtual long? UserId { get; set; } [StringLength(MaxUserNameOrEmailAddressLength)] public virtual string UserNameOrEmailOrPhone { get; set; } /// /// 客户端的 IP 地址 /// [StringLength(MaxClientIpAddressLength)] public virtual string ClientIpAddress { get; set; } /// /// 客户端的名称(一般为计算机名称) /// [StringLength(MaxClientNameLength)] public virtual string ClientName { get; set; } /// /// 如果在 Web 请求中调用此方法,则浏览器信息。 /// [StringLength(MaxBrowserInfoLength)] public virtual string BrowserInfo { get; set; } /// /// 登录尝试结果 /// public virtual VzLoginResultType Result { get; set; } public virtual DateTime CreationTime { get; set; } public UserLoginAttempt() { CreationTime = Clock.Now; } }