Files
xCommons/Authorization/RequiredRolesHandler.cs
T
2024-01-25 04:39:39 +03:30

31 lines
1010 B
C#

using System.Linq;
using System.Threading.Tasks;
using IdentityModel;
using Microsoft.AspNetCore.Authorization;
namespace xCommons.Authorization {
public partial class RequiredRolesHandler : AuthorizationHandler<RequiredRolesRequirement> {
protected override Task HandleRequirementAsync (
AuthorizationHandlerContext context,
RequiredRolesRequirement requirement
) {
//
var conatinsRole = context.User.HasClaim (c => c.Type == JwtClaimTypes.Role);
if (!conatinsRole) {
return Task.CompletedTask;
}
//
var roleClaim = context.User.Claims.FirstOrDefault (c => c.Type == JwtClaimTypes.Role);
if (roleClaim == null ||
!requirement.Roles.Contains (roleClaim.Value)
) {
return Task.CompletedTask;
}
//
context.Succeed (requirement);
return Task.CompletedTask;
}
}
}