From 3c7649db88bae1ca3a3b9988e715dc1b3b61dc71 Mon Sep 17 00:00:00 2001 From: James Newton-King Date: Fri, 1 Feb 2019 09:59:11 +1300 Subject: [PATCH] Add RequireAuthorization method for default policy (#6916) --- ...tionEndpointConventionBuilderExtensions.cs | 31 ++++++++++++++++++- ...ndpointConventionBuilderExtensionsTests.cs | 22 ++++++++++++- 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/src/Security/Authorization/Policy/src/AuthorizationEndpointConventionBuilderExtensions.cs b/src/Security/Authorization/Policy/src/AuthorizationEndpointConventionBuilderExtensions.cs index 82331a3217..316c45012b 100644 --- a/src/Security/Authorization/Policy/src/AuthorizationEndpointConventionBuilderExtensions.cs +++ b/src/Security/Authorization/Policy/src/AuthorizationEndpointConventionBuilderExtensions.cs @@ -4,12 +4,20 @@ using System; using System.Linq; using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Routing; namespace Microsoft.AspNetCore.Builder { + /// + /// Authorization extension methods for . + /// public static class AuthorizationEndpointConventionBuilderExtensions { + /// + /// Adds authorization policies with the specified to the endpoint(s). + /// + /// The endpoint convention builder. + /// A collection of . + /// The original convention builder parameter. public static IEndpointConventionBuilder RequireAuthorization(this IEndpointConventionBuilder builder, params IAuthorizeData[] authorizeData) { if (builder == null) @@ -32,6 +40,12 @@ namespace Microsoft.AspNetCore.Builder return builder; } + /// + /// Adds authorization policies with the specified names to the endpoint(s). + /// + /// The endpoint convention builder. + /// A collection of policy names. + /// The original convention builder parameter. public static IEndpointConventionBuilder RequireAuthorization(this IEndpointConventionBuilder builder, params string[] policyNames) { if (builder == null) @@ -46,5 +60,20 @@ namespace Microsoft.AspNetCore.Builder return builder.RequireAuthorization(policyNames.Select(n => new AuthorizeAttribute(n)).ToArray()); } + + /// + /// Adds the default authorization policy to the endpoint(s). + /// + /// The endpoint convention builder. + /// The original convention builder parameter. + public static IEndpointConventionBuilder RequireAuthorization(this IEndpointConventionBuilder builder) + { + if (builder == null) + { + throw new ArgumentNullException(nameof(builder)); + } + + return builder.RequireAuthorization(new AuthorizeAttribute()); + } } } diff --git a/src/Security/Authorization/test/AuthorizationEndpointConventionBuilderExtensionsTests.cs b/src/Security/Authorization/test/AuthorizationEndpointConventionBuilderExtensionsTests.cs index 94d8a71d45..7a01f88ae6 100644 --- a/src/Security/Authorization/test/AuthorizationEndpointConventionBuilderExtensionsTests.cs +++ b/src/Security/Authorization/test/AuthorizationEndpointConventionBuilderExtensionsTests.cs @@ -47,7 +47,27 @@ namespace Microsoft.AspNetCore.Authorization.Test var endpointModel = new RouteEndpointBuilder((context) => Task.CompletedTask, RoutePatternFactory.Parse("/"), 0); convention(endpointModel); - Assert.Equal("policy", Assert.IsAssignableFrom(Assert.Single(endpointModel.Metadata)).Policy); + var authMetadata = Assert.IsAssignableFrom(Assert.Single(endpointModel.Metadata)); + Assert.Equal("policy", authMetadata.Policy); + } + + [Fact] + public void RequireAuthorization_Default() + { + // Arrange + var builder = new TestEndpointConventionBuilder(); + + // Act + builder.RequireAuthorization(); + + // Assert + var convention = Assert.Single(builder.Conventions); + + var endpointModel = new RouteEndpointBuilder((context) => Task.CompletedTask, RoutePatternFactory.Parse("/"), 0); + convention(endpointModel); + + var authMetadata = Assert.IsAssignableFrom(Assert.Single(endpointModel.Metadata)); + Assert.Null(authMetadata.Policy); } private class TestEndpointConventionBuilder : IEndpointConventionBuilder