using Dpz.Core.Entity.Base;
using Dpz.Core.Entity.Base.Indexes;
namespace Dpz.Core.Public.Entity;
/// <summary>
/// 账号登录记录
/// </summary>
public class AccountLoginHistory : BaseEntity, IIndexedEntity<AccountLoginHistory>
{
/// <summary>
/// 账号
/// </summary>
public required string Account { get; set; }
/// <summary>
/// IP地址
/// </summary>
public string? IpAddress { get; set; }
/// <summary>
/// User-Agent
/// </summary>
public string? UserAgent { get; set; }
/// <summary>
/// SessionId
/// </summary>
public string? SessionId { get; set; }
/// <summary>
/// 登录方式
/// </summary>
[BsonRepresentation(BsonType.String)]
public LoginMethod Method { get; set; }
/// <summary>
/// 登录状态
/// </summary>
[BsonRepresentation(BsonType.String)]
public LoginResultStatus Status { get; set; }
/// <summary>
/// 创建时间
/// </summary>
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime CreateTime { get; set; }
/// <summary>
/// 最后更新时间
/// </summary>
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime LastUpdateTime { get; set; }
public static IReadOnlyList<EntityIndexDefinition> GetIndexDefinitions()
{
return new[]
{
new EntityIndexDefinition
{
Fields = [EntityIndexField.Ascending<AccountLoginHistory>(x => x.Account)],
},
};
}
}
⚠⚠ 以下内容为AI分析的结果,请根据实际情况进行判断。
这是一个用于记录用户账号登录历史的实体类,主要用于安全审计和用户行为分析。让我详细解释一下这个代码:
类定义和继承关系
public class AccountLoginHistory : BaseEntity, IIndexedEntity<AccountLoginHistory>
- 继承自
BaseEntity:获得基础实体的通用功能(如ID、基础操作等) - 实现
IIndexedEntity<AccountLoginHistory>:支持数据库索引定义,用于优化查询性能
属性字段
核心登录信息
Account:登录账号(必填字段,使用required关键字)Method:登录方式(枚举类型,如密码登录、短信验证码等)Status:登录结果状态(枚举类型,如成功、失败、被锁定等)
环境信息
IpAddress:客户端IP地址,用于地理位置分析和安全检测UserAgent:浏览器/客户端信息,用于设备识别SessionId:会话标识符,用于会话管理
时间戳
CreateTime:记录创建时间LastUpdateTime:最后更新时间
MongoDB 特定配置
[BsonRepresentation(BsonType.String)]
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
BsonRepresentation(BsonType.String):将枚举类型以字符串形式存储在MongoDB中,提高可读性BsonDateTimeOptions(Kind = DateTimeKind.Local):指定日期时间以本地时区格式存储
数据库索引优化
public static IReadOnlyList<EntityIndexDefinition> GetIndexDefinitions()
{
return new[]
{
new EntityIndexDefinition
{
Fields = [EntityIndexField.Ascending<AccountLoginHistory>(x => x.Account)],
},
};
}
在 Account 字段上创建升序索引,这样做的好处:
- 快速查询:根据账号查询登录历史时性能更优
- 安全分析:快速统计某个账号的登录频次、异常登录等
使用场景
这个实体类通常用于:
- 安全审计:记录所有登录尝试,便于安全分析
- 异常检测:识别异常登录行为(如异地登录、频繁失败尝试)
- 用户行为分析:了解用户登录习惯和设备使用情况
- 合规要求:满足某些行业的审计日志要求
这是一个设计良好的审计实体类,既考虑了功能需求,也兼顾了性能优化。
AI 正在分析代码…
评论加载中...