31 lines
1010 B
C#
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;
|
|
}
|
|
}
|
|
} |