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 资源 - 默认值:空数组
设计特点
- 不可变性:使用
IReadOnlyDictionary和IReadOnlyList确保数据的不可变性 - 国际化支持:通过字典结构支持多语言
- 扩展性:通过 Properties 属性支持自定义数据
- 继承:继承自
BaseEntity,可能包含 ID、创建时间等基础字段
使用场景
// 创建一个用户资料作用域
var scope = new DpzScope
{
Name = "profile",
DisplayName = "User Profile",
Description = "Access to user profile information",
Resources = new[] { "userapi" }
};
这个类是现代身份验证系统中的重要组件,用于精确控制应用程序的访问权限。
AI 正在分析代码…
评论加载中...