--
public interface IAuthorizationRequirement {}
public class DenyAnonymousAuthorizationRequirement : IAuthorizationRequirement { }
public class ClaimsAuthorizationRequirement : IAuthorizationRequirement
{
public string ClaimType { get; set; }
public IEnumerable<string> AllowedValues { get; set; }
}
public interface IAuthorizationHandler
{
Task HandleAsync(AuthorizationContext context);
}
public class PassThroughAuthorizationHandler : IAuthorizationHandler{}
public abstract class AuthorizationHandler<TRequirement> : IAuthorizationHandler
where TRequirement : IAuthorizationRequirement
{
public async Task HandleAsync(AuthorizationContext context)
{
foreach (var req in context.Policy.Requirements.OfType<TRequirement>())
{
if (await CheckAsync(context, req))
{
context.Succeed(req);
}
else
{
context.Fail();
}
}
}
public abstract Task<bool> CheckAsync(AuthorizationContext context, TRequirement requirement);
}
public class ClaimsAuthorizationHandler : AuthorizationHandler<ClaimsAuthorizationRequirement>{}
public class DenyAnonymousAuthorizationHandler : AuthorizationHandler<DenyAnonymousAuthorizationRequirement>
浙公网安备 33010602011771号