From cbeb1e4292d61f82464f17553005eff3bd6904d2 Mon Sep 17 00:00:00 2001 From: Kahbazi Date: Tue, 24 Aug 2021 00:10:32 +0430 Subject: [PATCH 1/3] Apply API feedback --- .../Core/src/AuthorizationFailure.cs | 16 ++++++++++++++-- .../Core/src/AuthorizationFailureReason.cs | 4 ++-- .../Core/src/PublicAPI.Unshipped.txt | 5 ++--- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/Security/Authorization/Core/src/AuthorizationFailure.cs b/src/Security/Authorization/Core/src/AuthorizationFailure.cs index 64a5c8d1093d..3560e75aaf0f 100644 --- a/src/Security/Authorization/Core/src/AuthorizationFailure.cs +++ b/src/Security/Authorization/Core/src/AuthorizationFailure.cs @@ -27,7 +27,7 @@ private AuthorizationFailure() { } /// /// Allows to flow more detailed reasons for why authorization failed. /// - public IEnumerable Reasons { get; private set; } = Array.Empty(); + public IEnumerable FailureReasons { get; private set; } = Array.Empty(); /// /// Return a failure due to being called. @@ -39,6 +39,18 @@ public static AuthorizationFailure ExplicitFail() FailCalled = true }; + /// + /// Calls Fail and stores the failure reasons for future reference. Can be called multiple times. + /// + /// The reasons of failure + /// The failure. + public static AuthorizationFailure ExplicitFail(IEnumerable reasons) + => new AuthorizationFailure + { + FailCalled = true, + FailureReasons = reasons + }; + /// /// Return a failure due to being called. /// @@ -47,7 +59,7 @@ public static AuthorizationFailure Failed(IEnumerable new AuthorizationFailure { FailCalled = true, - Reasons = reasons + FailureReasons = reasons }; /// diff --git a/src/Security/Authorization/Core/src/AuthorizationFailureReason.cs b/src/Security/Authorization/Core/src/AuthorizationFailureReason.cs index b8c30f67d1d9..23870539262b 100644 --- a/src/Security/Authorization/Core/src/AuthorizationFailureReason.cs +++ b/src/Security/Authorization/Core/src/AuthorizationFailureReason.cs @@ -22,11 +22,11 @@ public AuthorizationFailureReason(IAuthorizationHandler handler, string message) /// /// A message describing the failure reason. /// - public string Message { get; set; } + public string Message { get; } /// /// The responsible for this failure reason. /// - public IAuthorizationHandler Handler { get; set; } + public IAuthorizationHandler Handler { get; } } } diff --git a/src/Security/Authorization/Core/src/PublicAPI.Unshipped.txt b/src/Security/Authorization/Core/src/PublicAPI.Unshipped.txt index bed63d21e9d2..558fa655a589 100644 --- a/src/Security/Authorization/Core/src/PublicAPI.Unshipped.txt +++ b/src/Security/Authorization/Core/src/PublicAPI.Unshipped.txt @@ -1,12 +1,11 @@ #nullable enable *REMOVED*static Microsoft.AspNetCore.Authorization.AuthorizationServiceExtensions.AuthorizeAsync(this Microsoft.AspNetCore.Authorization.IAuthorizationService! service, System.Security.Claims.ClaimsPrincipal! user, object! resource, Microsoft.AspNetCore.Authorization.IAuthorizationRequirement! requirement) -> System.Threading.Tasks.Task! -Microsoft.AspNetCore.Authorization.AuthorizationFailure.Reasons.get -> System.Collections.Generic.IEnumerable! +Microsoft.AspNetCore.Authorization.AuthorizationFailure.FailureReasons.get -> System.Collections.Generic.IEnumerable! Microsoft.AspNetCore.Authorization.AuthorizationFailureReason Microsoft.AspNetCore.Authorization.AuthorizationFailureReason.AuthorizationFailureReason(Microsoft.AspNetCore.Authorization.IAuthorizationHandler! handler, string! message) -> void Microsoft.AspNetCore.Authorization.AuthorizationFailureReason.Handler.get -> Microsoft.AspNetCore.Authorization.IAuthorizationHandler! -Microsoft.AspNetCore.Authorization.AuthorizationFailureReason.Handler.set -> void Microsoft.AspNetCore.Authorization.AuthorizationFailureReason.Message.get -> string! -Microsoft.AspNetCore.Authorization.AuthorizationFailureReason.Message.set -> void +static Microsoft.AspNetCore.Authorization.AuthorizationFailure.ExplicitFail(System.Collections.Generic.IEnumerable! reasons) -> Microsoft.AspNetCore.Authorization.AuthorizationFailure! static Microsoft.AspNetCore.Authorization.AuthorizationFailure.Failed(System.Collections.Generic.IEnumerable! reasons) -> Microsoft.AspNetCore.Authorization.AuthorizationFailure! static Microsoft.AspNetCore.Authorization.AuthorizationServiceExtensions.AuthorizeAsync(this Microsoft.AspNetCore.Authorization.IAuthorizationService! service, System.Security.Claims.ClaimsPrincipal! user, object? resource, Microsoft.AspNetCore.Authorization.IAuthorizationRequirement! requirement) -> System.Threading.Tasks.Task! virtual Microsoft.AspNetCore.Authorization.AuthorizationHandlerContext.Fail(Microsoft.AspNetCore.Authorization.AuthorizationFailureReason! reason) -> void From 0989104487f698d95d22b1b87612ae652e759dfb Mon Sep 17 00:00:00 2001 From: Kahbazi Date: Tue, 24 Aug 2021 00:48:09 +0430 Subject: [PATCH 2/3] Update test & sample --- .../Authorization/test/DefaultAuthorizationServiceTests.cs | 6 +++--- .../SampleAuthorizationMiddlewareResultHandler.cs | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Security/Authorization/test/DefaultAuthorizationServiceTests.cs b/src/Security/Authorization/test/DefaultAuthorizationServiceTests.cs index ebd2dbcbd78a..c5bb0171ea0d 100644 --- a/src/Security/Authorization/test/DefaultAuthorizationServiceTests.cs +++ b/src/Security/Authorization/test/DefaultAuthorizationServiceTests.cs @@ -213,11 +213,11 @@ public async Task CanFailWithReasons() // Assert Assert.False(allowed.Succeeded); Assert.NotNull(allowed.Failure); - Assert.Equal(2, allowed.Failure.Reasons.Count()); - var first = allowed.Failure.Reasons.First(); + Assert.Equal(2, allowed.Failure.FailureReasons.Count()); + var first = allowed.Failure.FailureReasons.First(); Assert.Equal("1", first.Message); Assert.Equal(handler1, first.Handler); - var second = allowed.Failure.Reasons.Last(); + var second = allowed.Failure.FailureReasons.Last(); Assert.Equal("3", second.Message); Assert.Equal(handler3, second.Handler); } diff --git a/src/Security/samples/CustomAuthorizationFailureResponse/Authorization/SampleAuthorizationMiddlewareResultHandler.cs b/src/Security/samples/CustomAuthorizationFailureResponse/Authorization/SampleAuthorizationMiddlewareResultHandler.cs index be7e8d311f1d..f749afe06545 100644 --- a/src/Security/samples/CustomAuthorizationFailureResponse/Authorization/SampleAuthorizationMiddlewareResultHandler.cs +++ b/src/Security/samples/CustomAuthorizationFailureResponse/Authorization/SampleAuthorizationMiddlewareResultHandler.cs @@ -31,9 +31,9 @@ public async Task HandleAsync( // if the authorization was forbidden, let's use custom logic to handle that. if (policyAuthorizationResult.Forbidden && policyAuthorizationResult.AuthorizationFailure != null) { - if (policyAuthorizationResult.AuthorizationFailure.Reasons.Any()) + if (policyAuthorizationResult.AuthorizationFailure.FailureReasons.Any()) { - await httpContext.Response.WriteAsync(policyAuthorizationResult.AuthorizationFailure.Reasons.First().Message); + await httpContext.Response.WriteAsync(policyAuthorizationResult.AuthorizationFailure.FailureReasons.First().Message); // return right away as the default implementation would overwrite the status code return; From 4f93d131491ce4e672272690838bb644066c4f6c Mon Sep 17 00:00:00 2001 From: Kahbazi Date: Tue, 24 Aug 2021 01:54:33 +0430 Subject: [PATCH 3/3] Remove ExplicitFail --- .../Authorization/Core/src/AuthorizationFailure.cs | 12 ------------ .../Authorization/Core/src/PublicAPI.Unshipped.txt | 1 - 2 files changed, 13 deletions(-) diff --git a/src/Security/Authorization/Core/src/AuthorizationFailure.cs b/src/Security/Authorization/Core/src/AuthorizationFailure.cs index 3560e75aaf0f..98de1f3446b4 100644 --- a/src/Security/Authorization/Core/src/AuthorizationFailure.cs +++ b/src/Security/Authorization/Core/src/AuthorizationFailure.cs @@ -39,18 +39,6 @@ public static AuthorizationFailure ExplicitFail() FailCalled = true }; - /// - /// Calls Fail and stores the failure reasons for future reference. Can be called multiple times. - /// - /// The reasons of failure - /// The failure. - public static AuthorizationFailure ExplicitFail(IEnumerable reasons) - => new AuthorizationFailure - { - FailCalled = true, - FailureReasons = reasons - }; - /// /// Return a failure due to being called. /// diff --git a/src/Security/Authorization/Core/src/PublicAPI.Unshipped.txt b/src/Security/Authorization/Core/src/PublicAPI.Unshipped.txt index 558fa655a589..4622ec0945c4 100644 --- a/src/Security/Authorization/Core/src/PublicAPI.Unshipped.txt +++ b/src/Security/Authorization/Core/src/PublicAPI.Unshipped.txt @@ -5,7 +5,6 @@ Microsoft.AspNetCore.Authorization.AuthorizationFailureReason Microsoft.AspNetCore.Authorization.AuthorizationFailureReason.AuthorizationFailureReason(Microsoft.AspNetCore.Authorization.IAuthorizationHandler! handler, string! message) -> void Microsoft.AspNetCore.Authorization.AuthorizationFailureReason.Handler.get -> Microsoft.AspNetCore.Authorization.IAuthorizationHandler! Microsoft.AspNetCore.Authorization.AuthorizationFailureReason.Message.get -> string! -static Microsoft.AspNetCore.Authorization.AuthorizationFailure.ExplicitFail(System.Collections.Generic.IEnumerable! reasons) -> Microsoft.AspNetCore.Authorization.AuthorizationFailure! static Microsoft.AspNetCore.Authorization.AuthorizationFailure.Failed(System.Collections.Generic.IEnumerable! reasons) -> Microsoft.AspNetCore.Authorization.AuthorizationFailure! static Microsoft.AspNetCore.Authorization.AuthorizationServiceExtensions.AuthorizeAsync(this Microsoft.AspNetCore.Authorization.IAuthorizationService! service, System.Security.Claims.ClaimsPrincipal! user, object? resource, Microsoft.AspNetCore.Authorization.IAuthorizationRequirement! requirement) -> System.Threading.Tasks.Task! virtual Microsoft.AspNetCore.Authorization.AuthorizationHandlerContext.Fail(Microsoft.AspNetCore.Authorization.AuthorizationFailureReason! reason) -> void