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 命名空间),用于在程序中保存用户的账号 / 个人信息并提供一个转换为对外展示用 DTO 的方法。下面逐项说明其功能和关键点:

总体

  • 类名:User, 实现了 IBaseEntity(可能是项目中所有实体共有接口,未在片段中给出具体成员)。
  • 用途:作为用户数据模型,包含账号、昵称、密码、头像、权限、时间戳等字段,并提供 GetUserInfo 方法将敏感字段过滤后返回给外部代码或前端。

属性说明

  • required string Id { get; set; }:账号(必填)。C# 11 的 required 修饰符表示初始化时必须赋值。
  • required string Name { get; set; }:昵称(必填)。
  • required string Password { get; set; }:密码(必填)。注意这里是明文字段,实际应用应存储哈希值并注意序列化/传输安全。
  • bool? Enable { get; set; }:是否启用,nullable 表示可能为 null(未设置)。
  • string? Sign { get; set; }:签名,可空。
  • required string Avatar { get; set; }:头像地址(必填)。
  • Sex Sex { get; set; }:性别,Sex 很可能是枚举类型(未在片段中定义)。
  • required string Key { get; set; }:key(可能是 API key、用户唯一码等,必填)。
  • Permissions? Permissions { get; set; }:权限信息,可空,Permissions 可能是枚举或复合类型(角色/权限集合)。
  • DateTime? CreateTime / LastUpdateTime:创建与最后修改时间,两个属性上都加了 [BsonDateTimeOptions(Kind = DateTimeKind.Local)],这是 MongoDB.Bson 的属性,用来在序列化到 MongoDB BSON 时指定 DateTime 的 Kind(本例指定为本地时间)。

GetUserInfo 方法

  • 返回一个 UserInfo 对象(未给出定义),用于把用户实体转换为对外展示的用户信息。
  • 该方法没有把 Password 包含在内(这点很重要),避免泄露密码。
  • 对 Avatar 做了默认值处理:如果 Avatar 为空或 null,返回 "/images/guest.png"。
  • 返回字段包括 Id、Name、Sign、Sex、Avatar、Permissions、Enable、Key(注意 Key 被包含,视业务可能需要谨慎)。

其他要点与建议

  • required 修饰符确保对象初始化时关键字段不会被遗漏。
  • BsonDateTimeOptions 用于 MongoDB 存储时的时间类型处理,保证以本地时间存储/读取。
  • 安全性:Password 字段应存储为哈希值,避免明文保存;在序列化(JSON/BSON)或对外返回时应尽量忽略该字段(例如使用 [JsonIgnore] / [BsonIgnore] 或在 DTO 中不包含)。
  • 如果 Key 是敏感信息(如 API key / token),在对外暴露时也要谨慎处理。

总结 这个类是一个完整的用户实体模型,包含用户身份、资料、权限与时间信息,并提供了一个将实体转换为对外安全展示对象的便捷方法(GetUserInfo),同时通过属性和注解支持与 MongoDB 的序列化行为。

评论加载中...