Initial Commit ...
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
|
||||
namespace xCommons.Authorization {
|
||||
public partial class RequiredRolesRequirement : IAuthorizationRequirement {
|
||||
public string[] Roles { get; }
|
||||
public RequiredRolesRequirement (params string[] Roles) {
|
||||
this.Roles = Roles;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user