已完成管理后台第一批只读功能的 ASP.NET Core 10 迁移:
原生接口:context、dashboard、schools、school-organization、admins、exams 保持超级、校级、班级管理员的数据范围及权限隔离 其余管理写入、审批流和考务编排仍由 Node 转发 新增 ADMIN_NATIVE_READS_ENABLED=true 开关,并强制要求原生认证和共享 Redis
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
using Eis.Application.Administration;
|
||||
using Eis.Infrastructure.Administration;
|
||||
|
||||
namespace Eis.Web.Administration;
|
||||
|
||||
public static class NativeAdminReadEndpoints
|
||||
{
|
||||
public static IEndpointRouteBuilder MapNativeAdminReadEndpoints(
|
||||
this IEndpointRouteBuilder endpoints,
|
||||
AdminMigrationOptions options)
|
||||
{
|
||||
if (!options.NativeReadsEnabled) return endpoints;
|
||||
|
||||
endpoints.MapGet("/api/admin/context", (HttpContext context, IAdminReadService service, CancellationToken cancellationToken) =>
|
||||
Execute(context, service.GetContextAsync(Token(context), cancellationToken)));
|
||||
endpoints.MapGet("/api/admin/dashboard", (HttpContext context, IAdminReadService service, CancellationToken cancellationToken) =>
|
||||
Execute(context, service.GetDashboardAsync(Token(context), cancellationToken)));
|
||||
endpoints.MapGet("/api/admin/schools", (HttpContext context, IAdminReadService service, CancellationToken cancellationToken) =>
|
||||
Execute(context, service.GetSchoolsAsync(Token(context), cancellationToken)));
|
||||
endpoints.MapGet("/api/admin/school-organization", (HttpContext context, IAdminReadService service, CancellationToken cancellationToken) =>
|
||||
Execute(context, service.GetSchoolOrganizationAsync(Token(context), cancellationToken)));
|
||||
endpoints.MapGet("/api/admin/admins", (HttpContext context, IAdminReadService service, CancellationToken cancellationToken) =>
|
||||
Execute(context, service.GetAdminsAsync(Token(context), cancellationToken)));
|
||||
endpoints.MapGet("/api/admin/exams", (HttpContext context, IAdminReadService service, CancellationToken cancellationToken) =>
|
||||
Execute(context, service.GetExamsAsync(Token(context), cancellationToken)));
|
||||
return endpoints;
|
||||
}
|
||||
|
||||
private static async Task<IResult> Execute(HttpContext context, Task<AdminEndpointResult> operation)
|
||||
{
|
||||
var result = await operation;
|
||||
context.Response.Headers.CacheControl = "no-store";
|
||||
context.Response.Headers["X-EIS-Implementation"] = "aspnet-core";
|
||||
return Results.Json(result.Body, statusCode: result.StatusCode);
|
||||
}
|
||||
|
||||
private static string Token(HttpContext context) =>
|
||||
context.Request.Cookies.TryGetValue("hz_session", out var token) ? token : string.Empty;
|
||||
}
|
||||
Reference in New Issue
Block a user