using Dpz.Core.Entity.Base;
namespace Dpz.Core.Public.Entity;
public class User : IBaseEntity
{
/// <summary>
/// 账号
/// </summary>
public required string Id { get; set; }
/// <summary>
/// 昵称
/// </summary>
public required string Name { get; set; }
/// <summary>
/// 密码
/// </summary>
public required string Password { get; set; }
/// <summary>
/// 是否启用
/// </summary>
public bool? Enable { get; set; }
/// <summary>
/// /签名
/// </summary>
public string? Sign { get; set; }
/// <summary>
/// 头像
/// </summary>
public required string Avatar { get; set; }
/// <summary>
/// 性别
/// </summary>
public Sex Sex { get; set; }
/// <summary>
/// key
/// </summary>
public required string Key { get; set; }
/// <summary>
/// 权限
/// </summary>
public Permissions? Permissions { 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 UserInfo GetUserInfo()
{
return new UserInfo
{
Id = Id,
Name = Name,
Sign = Sign,
Sex = Sex,
Avatar = string.IsNullOrEmpty(Avatar) ? "/images/guest.png" : Avatar,
Permissions = Permissions,
Enable = Enable,
Key = Key,
};
}
}
⚠⚠ 以下内容为AI分析的结果,请根据实际情况进行判断。
这段代码定义了一个名为 User 的实体类,用于表示系统中的用户信息。下面按要点解释其功能与设计细节:
总体
- 所属命名空间:Dpz.Core.Public.Entity,引用了 Dpz.Core.Entity.Base(该处应包含 IBaseEntity 接口定义)。
- User 实现了 IBaseEntity(通常表示这是一个持久化实体/数据库实体)。
属性说明
- Id (required string):账号(使用 C# 11 的 required 关键字,表示创建实例时必须赋值)。
- Name (required string):昵称,同样必须赋值。
- Password (required string):密码(注意:这里是字符串,实际应用中应存储哈希值而非明文)。
- Enable (bool?):是否启用,使用可空布尔,未设置时为 null。
- Sign (string?):签名,可空。
- Avatar (required string):头像 URL 或路径,必须赋值。
- Sex (Sex):性别,类型为自定义枚举 Sex。
- Key (required string):key(可能为 API key、识别码等),必须赋值。
- Permissions (Permissions?):权限,类型为自定义 Permissions(可能是枚举或位标志),可空。
- CreateTime (DateTime?) / LastUpdateTime (DateTime?):创建时间与最后修改时间,均为可空 DateTime,并带有 [BsonDateTimeOptions(Kind = DateTimeKind.Local)] 特性。
关于 [BsonDateTimeOptions]
- 该特性来自 MongoDB 驱动(MongoDB.Bson.Serialization.Attributes),用于控制 DateTime 在序列化到/从 MongoDB 时的 Kind(这里指定为本地时间 Local)。
方法
- GetUserInfo():构造并返回一个 UserInfo 对象(用于外部展示/传输的 DTO),从 User 中拷贝部分字段:
- 包含 Id、Name、Sign、Sex、Permissions、Enable、Key。
- 对 Avatar 做了默认处理:如果 Avatar 为空或空字符串,则使用 "/images/guest.png" 作为默认头像。
- 注意:返回的 UserInfo 未包含 Password(这是正确的做法,避免泄露敏感信息)。
设计与安全建议
- required 关键字保证关键字段在创建时被赋值,结合可空引用类型可以提高初始化正确性。
- Password 字段应保存密码哈希与盐,而不是明文;且在序列化或返回给客户端时不要包含密码。
- Permissions 字段应明确其类型(若为位标志,便于权限组合)。
- BsonDateTimeOptions 指定为 Local,存储/读取时要注意跨时区问题,通常也可以考虑使用 UTC 以避免时区偏差。
示例(用法概念)
- 创建用户: var user = new User { Id = "u1", Name = "张三", Password = "hashedPwd", Avatar = "/avatars/zs.png", Key = "abc", Sex = Sex.Male };
- 获取对外信息: var info = user.GetUserInfo();
总结
- 该类是一个典型的用户实体,包含用户基本信息、权限、时间戳等,带有 MongoDB 序列化的时间选项,并提供了一个用于返回非敏感用户信息的转换方法 GetUserInfo。
评论加载中...