using Dpz.Core.Auth.Models.AdminApi;
using Dpz.Core.Service.Mediator.Features.Auth.Commands;
using Dpz.Core.Service.Mediator.Features.Auth.Contracts;
using Dpz.Core.Service.Mediator.Features.Auth.Queries;

namespace Dpz.Core.Auth.Controllers;

[ApiController]
[Route("api/admin/grants")]
[Authorize(nameof(Permissions.System))]
public class GrantController(IMediator mediator) : ControllerBase
{
    [HttpGet]
    public async Task<ResponseResult<PagedListWarp<AuthAllowedClientItem>>> Page(
        string? account = null,
        string? appId = null,
        int page = 1,
        int limit = 20,
        CancellationToken cancellationToken = default
    )
    {
        var result = await mediator.Send(
            new SearchAllowedClientsQuery
            {
                Account = account,
                AppId = appId,
                Page = page,
                Limit = limit,
            },
            cancellationToken
        );

        return ResponseResult<PagedListWarp<AuthAllowedClientItem>>.Ok(result);
    }

    [HttpPost]
    public async Task<ResponseResult> Grant(
        GrantAllowedClientRequest request,
        CancellationToken cancellationToken
    )
    {
        var result = await mediator.Send(
            new GrantApplicationAccessCommand { Account = request.Account, AppId = request.AppId },
            cancellationToken
        );

        return result;
    }

    [HttpDelete("{id}")]
    public async Task<ResponseResult> Revoke(string id, CancellationToken cancellationToken)
    {
        var result = await mediator.Send(
            new RevokeAllowedClientCommand { Id = id },
            cancellationToken
        );
        return result;
    }
}
⚠⚠    以下内容为AI分析的结果,请根据实际情况进行判断。

代码解释

这是一个 ASP.NET Core Web API 控制器,用于管理**授权许可(Grants)**功能。以下是详细解释:

整体结构

控制器名称: GrantController

  • 路由: /api/admin/grants
  • 权限: 需要系统级别权限 (Permissions.System)
  • 依赖注入: 使用主构造函数注入 IMediator(基于 MediatR 模式)

三个核心接口

1. GET - 分页查询授权记录

[HttpGet]
public async Task<ResponseResult<PagedListWarp<AuthAllowedClientItem>>> Page(...)

功能: 查询已授权的客户端列表

  • 参数:
    • account: 用户账号(可选)
    • appId: 应用ID(可选)
    • page: 页码(默认1)
    • limit: 每页数量(默认20)
  • 处理: 发送 SearchAllowedClientsQuery 查询
  • 返回: 分页的授权客户端列表

2. POST - 授予访问权限

[HttpPost]
public async Task<ResponseResult> Grant(...)

功能: 为指定账号授予应用访问权限

  • 参数: GrantAllowedClientRequest(包含账号和应用ID)
  • 处理: 发送 GrantApplicationAccessCommand 命令
  • 返回: 操作结果

3. DELETE - 撤销访问权限

[HttpDelete("{id}")]
public async Task<ResponseResult> Revoke(...)

功能: 撤销已授予的访问权限

  • 参数: id - 授权记录ID
  • 处理: 发送 RevokeAllowedClientCommand 命令
  • 返回: 操作结果

设计模式

  • CQRS模式: 使用 MediatR 分离查询(Query)和命令(Command)
  • RESTful设计: 遵循标准 HTTP 方法语义
  • 依赖注入: 通过构造函数注入降低耦合
  • 异步编程: 所有方法使用 async/await 支持取消令牌

应用场景

典型的OAuth/权限管理场景,用于:

  • 管理员查看哪些用户被授权访问哪些应用
  • 为用户授予新的应用访问权限
  • 撤销用户对特定应用的访问权限
评论加载中...