using BotSharp.Abstraction.Users; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.Extensions.DependencyInjection; namespace BotSharp.Abstraction.Infrastructures.Attributes; /// /// BotSharp authorization: check whether the request user is admin or root role. /// [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] public class BotSharpAuthAttribute : Attribute, IAsyncAuthorizationFilter { public BotSharpAuthAttribute() { } public async Task OnAuthorizationAsync(AuthorizationFilterContext context) { var services = context.HttpContext.RequestServices; var userIdentity = services.GetRequiredService(); var userService = services.GetRequiredService(); var (isAdmin, user) = await userService.IsAdminUser(userIdentity.Id); if (!isAdmin || user == null) { context.Result = new BadRequestResult(); } } }