BotSharp/src/Infrastructure/BotSharp.Abstraction/Infrastructures/Attributes/BotSharpAuthAttribute.cs
2025-05-22 16:57:27 -05:00

33 lines
1,016 B
C#

using BotSharp.Abstraction.Users;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.DependencyInjection;
namespace BotSharp.Abstraction.Infrastructures.Attributes;
/// <summary>
/// BotSharp authorization: check whether the request user is admin or root role.
/// </summary>
[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<IUserIdentity>();
var userService = services.GetRequiredService<IUserService>();
var (isAdmin, user) = await userService.IsAdminUser(userIdentity.Id);
if (!isAdmin || user == null)
{
context.Result = new UnauthorizedResult();
}
}
}