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/权限管理场景,用于:
- 管理员查看哪些用户被授权访问哪些应用
- 为用户授予新的应用访问权限
- 撤销用户对特定应用的访问权限
AI 正在分析代码…
评论加载中...