diff --git a/src/Microsoft.AspNet.Authorization/AuthorizationPolicyBuilder.cs b/src/Microsoft.AspNet.Authorization/AuthorizationPolicyBuilder.cs index a0378f9c15..053ff49605 100644 --- a/src/Microsoft.AspNet.Authorization/AuthorizationPolicyBuilder.cs +++ b/src/Microsoft.AspNet.Authorization/AuthorizationPolicyBuilder.cs @@ -123,14 +123,19 @@ namespace Microsoft.AspNet.Authorization return this; } - public AuthorizationPolicyBuilder RequireDelegate(Action handler) + /// + /// Requires that this Function returns true + /// + /// Function that must return true + /// + public AuthorizationPolicyBuilder RequireAssertion(Func assert) { - if (handler == null) + if (assert == null) { - throw new ArgumentNullException(nameof(handler)); + throw new ArgumentNullException(nameof(assert)); } - Requirements.Add(new DelegateRequirement(handler)); + Requirements.Add(new AssertionRequirement(assert)); return this; } diff --git a/src/Microsoft.AspNet.Authorization/Infrastructure/AssertionRequirement.cs b/src/Microsoft.AspNet.Authorization/Infrastructure/AssertionRequirement.cs new file mode 100644 index 0000000000..b0eb44cf9b --- /dev/null +++ b/src/Microsoft.AspNet.Authorization/Infrastructure/AssertionRequirement.cs @@ -0,0 +1,33 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; + +namespace Microsoft.AspNet.Authorization.Infrastructure +{ + public class AssertionRequirement : AuthorizationHandler, IAuthorizationRequirement + { + /// + /// Function that is called to handle this requirement + /// + public Func Handler { get; } + + public AssertionRequirement(Func assert) + { + if (assert == null) + { + throw new ArgumentNullException(nameof(assert)); + } + + Handler = assert; + } + + protected override void Handle(AuthorizationContext context, AssertionRequirement requirement) + { + if (Handler(context)) + { + context.Succeed(requirement); + } + } + } +} diff --git a/src/Microsoft.AspNet.Authorization/Infrastructure/DelegateRequirement.cs b/src/Microsoft.AspNet.Authorization/Infrastructure/DelegateRequirement.cs deleted file mode 100644 index 834060bb64..0000000000 --- a/src/Microsoft.AspNet.Authorization/Infrastructure/DelegateRequirement.cs +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System; - -namespace Microsoft.AspNet.Authorization.Infrastructure -{ - public class DelegateRequirement : AuthorizationHandler, IAuthorizationRequirement - { - public Action Handler { get; } - - public DelegateRequirement(Action handleMe) - { - Handler = handleMe; - } - - protected override void Handle(AuthorizationContext context, DelegateRequirement requirement) - { - Handler(context, requirement); - } - } -} diff --git a/test/Microsoft.AspNet.Authorization.Test/DefaultAuthorizationServiceTests.cs b/test/Microsoft.AspNet.Authorization.Test/DefaultAuthorizationServiceTests.cs index 902bf17cea..fc4377aebe 100644 --- a/test/Microsoft.AspNet.Authorization.Test/DefaultAuthorizationServiceTests.cs +++ b/test/Microsoft.AspNet.Authorization.Test/DefaultAuthorizationServiceTests.cs @@ -905,13 +905,13 @@ namespace Microsoft.AspNet.Authorization.Test } [Fact] - public async Task CanAuthorizeWithDelegateRequirement() + public async Task CanAuthorizeWithAssertionRequirement() { var authorizationService = BuildAuthorizationService(services => { services.AddAuthorization(options => { - options.AddPolicy("Basic", policy => policy.RequireDelegate((context, req) => context.Succeed(req))); + options.AddPolicy("Basic", policy => policy.RequireAssertion(context => true)); }); }); var user = new ClaimsPrincipal();