28 lines
891 B
C#
28 lines
891 B
C#
using System.Security.Claims;
|
|
using adas_core.Domain.Enums;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.AspNetCore.Mvc.Filters;
|
|
|
|
namespace adas_core.Authentication.Attributes;
|
|
|
|
[AttributeUsage(AttributeTargets.Method)]
|
|
public class AuthorizeRolesAttribute(PermissionEnum.RolesType type) : Attribute, IAuthorizationFilter
|
|
{
|
|
public void OnAuthorization(AuthorizationFilterContext context)
|
|
{
|
|
var user = context.HttpContext.User;
|
|
|
|
if (user.Identity?.IsAuthenticated != true)
|
|
{
|
|
context.Result = new UnauthorizedResult();
|
|
return;
|
|
}
|
|
|
|
var roles = user.Claims.Where(c => c.Type == ClaimTypes.Role);
|
|
|
|
if (type == PermissionEnum.RolesType.AuthSome) return;
|
|
|
|
var hasRequiredRole = roles.Any(r => r.Value.StartsWith(type.ToString()));
|
|
if (!hasRequiredRole) context.Result = new ForbidResult();
|
|
}
|
|
} |