Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save joshuawootonn/fcefc5530a882874d759efbe58b6418c to your computer and use it in GitHub Desktop.
Save joshuawootonn/fcefc5530a882874d759efbe58b6418c to your computer and use it in GitHub Desktop.
using Microsoft.AspNetCore.Authorization;
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using System.Threading.Tasks;
namespace asdf.Infrastructure
{
public class HasPermissionHandler : AuthorizationHandler<HasAuthorizationRequirement>
{
private string PERMISSION_TYPE = "permissions";
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, HasAuthorizationRequirement requirement)
{
// If user does not have the permission claim, get out of here
if (!context.User.HasClaim(claim => claim.Type == PERMISSION_TYPE && claim.Issuer == requirement.issuer))
return Task.CompletedTask;
if (getPermissionsFromUserForIssuer(context.User, requirement).Any(s => s.ToString() == requirement.scope))
context.Succeed(requirement);
return Task.CompletedTask;
}
private List<string> getPermissionsFromUserForIssuer(ClaimsPrincipal user, HasAuthorizationRequirement requirement)
{
return user.Claims
.Where((c => c.Type == PERMISSION_TYPE && c.Issuer == requirement.issuer))
.Select(c => c.ToString()).ToList();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment