namespace Dpz.Core.Service.Mediator.Features.Auth.Contracts;
using Dpz.Core.Public.Entity.Auth;
using Entity.Base.MapperConfig;
using Mapster;
/// <summary>
/// 认证应用分页项
/// </summary>
public class AuthApplicationPageItem : IHaveCustomMapping
{
/// <summary>
/// 应用标识
/// </summary>
public string Id { get; set; } = string.Empty;
/// <summary>
/// 客户端标识
/// </summary>
public string ClientId { get; set; } = string.Empty;
/// <summary>
/// 显示名称
/// </summary>
public string? DisplayName { get; set; }
/// <summary>
/// 应用类型
/// </summary>
public string? ApplicationType { get; set; }
/// <summary>
/// 客户端类型
/// </summary>
public string? ClientType { get; set; }
/// <summary>
/// 回调地址
/// </summary>
public List<string> RedirectUris { get; set; } = [];
/// <summary>
/// 登出回调地址
/// </summary>
public string? PostLogoutRedirectUri { get; set; }
/// <summary>
/// 应用图标
/// </summary>
public string? Logo { get; set; }
/// <summary>
/// 权限
/// </summary>
public List<string> Permissions { get; set; } = [];
public static void CreateMappings(TypeAdapterConfig cfg)
{
cfg.NewConfig<DpzApplication, AuthApplicationPageItem>()
.Map(dest => dest.Id, src => src.Id.ToString())
.Map(dest => dest.RedirectUris, src => SplitRedirectUris(src.RedirectUris))
.Map(dest => dest.Permissions, src => src.Permissions)
.Map(dest => dest.Logo, src => GetLogo(src));
}
private static List<string> SplitRedirectUris(string? redirectUris)
{
return string.IsNullOrWhiteSpace(redirectUris)
? []
: redirectUris
.Split(';', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries)
.ToList();
}
private static string? GetLogo(DpzApplication application)
{
return application.Properties.TryGetValue("Logo", out var logo)
? logo.IsString
? logo.AsString
: logo.ToString()
: null;
}
}
⚠⚠ 以下内容为AI分析的结果,请根据实际情况进行判断。
代码解释
这是一个用于认证应用分页查询结果项的数据传输对象(DTO)类,使用了 Mapster 进行对象映射配置。
主要组成部分:
1. 类定义
public class AuthApplicationPageItem : IHaveCustomMapping
- 实现了
IHaveCustomMapping接口,表明该类需要自定义对象映射规则 - 用于在分页查询时返回认证应用的基本信息
2. 属性定义
包含了认证应用的核心信息字段:
Id: 应用唯一标识(字符串类型)ClientId: OAuth/OIDC 客户端标识DisplayName: 应用显示名称ApplicationType: 应用类型(如 Web、Native 等)ClientType: 客户端类型(如 Confidential、Public)RedirectUris: OAuth 回调地址列表PostLogoutRedirectUri: 登出后的重定向地址Logo: 应用图标 URLPermissions: 应用拥有的权限列表
3. 自定义映射配置 (CreateMappings 方法)
public static void CreateMappings(TypeAdapterConfig cfg)
定义了从 DpzApplication 实体到 AuthApplicationPageItem DTO 的映射规则:
- ID 转换: 将实体的
Id转换为字符串 - RedirectUris 处理: 调用
SplitRedirectUris方法将分号分隔的字符串拆分为列表 - Permissions 直接映射: 权限列表直接复制
- Logo 提取: 调用
GetLogo方法从应用属性中提取 Logo
4. 辅助方法
SplitRedirectUris:
- 将分号分隔的回调地址字符串拆分为字符串列表
- 自动移除空条目和首尾空格
- 空字符串返回空列表
GetLogo:
- 从
DpzApplication的Properties字典中尝试获取 "Logo" 键的值 - 如果值是字符串类型,返回
AsString - 否则调用
ToString()方法 - 找不到则返回
null
设计特点:
- 使用 C# 11+ 的简化语法(如
= []初始化集合) - 采用 Mapster 进行灵活的对象映射
- 将存储格式(分号分隔字符串)转换为友好的列表格式
- 支持动态属性提取(Logo 从 Properties 字典获取)
AI 正在分析代码…
评论加载中...