using System.Collections.Immutable;
using Dpz.Core.Entity.Base;

namespace Dpz.Core.Public.Entity.Auth;

/// <summary>
/// OpenIddict 作用域
/// </summary>
public class DpzScope : BaseEntity
{
    /// <summary>
    /// 获取或设置并发令牌
    /// </summary>
    public string? ConcurrencyToken { get; set; } = Guid.NewGuid().ToString();

    /// <summary>
    /// 获取或设置与当前作用域关联的公共描述
    /// </summary>
    public string? Description { get; set; }

    /// <summary>
    /// 获取或设置与当前作用域关联的本地化公共描述
    /// </summary>
    public IReadOnlyDictionary<string, string>? Descriptions { get; set; } =
        ImmutableDictionary.Create<string, string>();

    /// <summary>
    /// 获取或设置与当前作用域关联的显示名称
    /// </summary>
    public string? DisplayName { get; set; }

    /// <summary>
    /// 获取或设置与当前作用域关联的本地化显示名称
    /// </summary>
    public IReadOnlyDictionary<string, string>? DisplayNames { get; set; } =
        ImmutableDictionary.Create<string, string>();

    /// <summary>
    /// 获取或设置与当前作用域关联的唯一名称
    /// </summary>
    public string? Name { get; set; }

    /// <summary>
    /// 获取或设置与当前作用域关联的附加属性
    /// </summary>
    public BsonDocument? Properties { get; set; }

    /// <summary>
    /// 获取或设置与当前作用域关联的资源
    /// </summary>
    public IReadOnlyList<string>? Resources { get; set; } = [];
}
⚠⚠    以下内容为AI分析的结果,请根据实际情况进行判断。

这是一个用于 OpenIddict 身份验证框架的作用域(Scope)实体类,继承自 BaseEntity。让我详细解释一下这个类的各个组成部分:

类的用途

DpzScope 类用于定义 OAuth 2.0/OpenID Connect 中的作用域(Scope),作用域用于限制访问令牌能够访问的资源范围。

属性详解

1. ConcurrencyToken

public string? ConcurrencyToken { get; set; } = Guid.NewGuid().ToString();
  • 用途:并发控制令牌,用于处理并发更新冲突
  • 默认值:自动生成一个新的 GUID 字符串
  • 作用:在多用户同时编辑同一个作用域时,防止数据覆盖

2. Description & Descriptions

public string? Description { get; set; }
public IReadOnlyDictionary<string, string>? Descriptions { get; set; }
  • Description:作用域的公共描述(单一语言)
  • Descriptions:本地化的描述信息(多语言支持)
  • 示例"access to user profile"{"en": "Access user data", "zh": "访问用户数据"}

3. DisplayName & DisplayNames

public string? DisplayName { get; set; }
public IReadOnlyDictionary<string, string>? DisplayNames { get; set; }
  • DisplayName:在用户界面显示的名称
  • DisplayNames:本地化的显示名称
  • 示例"User Profile"{"en": "Profile", "zh": "个人资料"}

4. Name

public string? Name { get; set; }
  • 用途:作用域的唯一标识名称
  • 示例"profile", "email", "openid"
  • 重要性:这是在 OAuth 流程中实际使用的标识符

5. Properties

public BsonDocument? Properties { get; set; }
  • 用途:存储与作用域相关的额外属性
  • 类型:BSON 文档(通常用于 MongoDB)
  • 灵活性:允许存储自定义的键值对数据

6. Resources

public IReadOnlyList<string>? Resources { get; set; } = [];
  • 用途:定义该作用域可以访问的资源列表
  • 示例["api1", "api2"] 表示可以访问 api1 和 api2 资源
  • 默认值:空数组

设计特点

  1. 不可变性:使用 IReadOnlyDictionaryIReadOnlyList 确保数据的不可变性
  2. 国际化支持:通过字典结构支持多语言
  3. 扩展性:通过 Properties 属性支持自定义数据
  4. 继承:继承自 BaseEntity,可能包含 ID、创建时间等基础字段

使用场景

// 创建一个用户资料作用域
var scope = new DpzScope
{
    Name = "profile",
    DisplayName = "User Profile",
    Description = "Access to user profile information",
    Resources = new[] { "userapi" }
};

这个类是现代身份验证系统中的重要组件,用于精确控制应用程序的访问权限。

评论加载中...