Skip to content

Commit 47ae9d9

Browse files
authored
Remove RequiredPolicy (#9399)
1 parent 7448964 commit 47ae9d9

File tree

8 files changed

+7
-90
lines changed

8 files changed

+7
-90
lines changed

src/Security/Authorization/Core/ref/Microsoft.AspNetCore.Authorization.netcoreapp3.0.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ public partial class AuthorizationOptions
4747
public AuthorizationOptions() { }
4848
public Microsoft.AspNetCore.Authorization.AuthorizationPolicy DefaultPolicy { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
4949
public bool InvokeHandlersAfterFailure { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
50-
public Microsoft.AspNetCore.Authorization.AuthorizationPolicy RequiredPolicy { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
5150
public void AddPolicy(string name, Microsoft.AspNetCore.Authorization.AuthorizationPolicy policy) { }
5251
public void AddPolicy(string name, System.Action<Microsoft.AspNetCore.Authorization.AuthorizationPolicyBuilder> configurePolicy) { }
5352
public Microsoft.AspNetCore.Authorization.AuthorizationPolicy GetPolicy(string name) { throw null; }
@@ -127,7 +126,6 @@ public partial class DefaultAuthorizationPolicyProvider : Microsoft.AspNetCore.A
127126
public DefaultAuthorizationPolicyProvider(Microsoft.Extensions.Options.IOptions<Microsoft.AspNetCore.Authorization.AuthorizationOptions> options) { }
128127
public System.Threading.Tasks.Task<Microsoft.AspNetCore.Authorization.AuthorizationPolicy> GetDefaultPolicyAsync() { throw null; }
129128
public virtual System.Threading.Tasks.Task<Microsoft.AspNetCore.Authorization.AuthorizationPolicy> GetPolicyAsync(string policyName) { throw null; }
130-
public System.Threading.Tasks.Task<Microsoft.AspNetCore.Authorization.AuthorizationPolicy> GetRequiredPolicyAsync() { throw null; }
131129
}
132130
public partial class DefaultAuthorizationService : Microsoft.AspNetCore.Authorization.IAuthorizationService
133131
{
@@ -157,7 +155,6 @@ public partial interface IAuthorizationPolicyProvider
157155
{
158156
System.Threading.Tasks.Task<Microsoft.AspNetCore.Authorization.AuthorizationPolicy> GetDefaultPolicyAsync();
159157
System.Threading.Tasks.Task<Microsoft.AspNetCore.Authorization.AuthorizationPolicy> GetPolicyAsync(string policyName);
160-
System.Threading.Tasks.Task<Microsoft.AspNetCore.Authorization.AuthorizationPolicy> GetRequiredPolicyAsync();
161158
}
162159
public partial interface IAuthorizationRequirement
163160
{

src/Security/Authorization/Core/src/AuthorizationOptions.cs

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -27,18 +27,6 @@ public class AuthorizationOptions
2727
/// </remarks>
2828
public AuthorizationPolicy DefaultPolicy { get; set; } = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build();
2929

30-
/// <summary>
31-
/// Gets or sets the required authorization policy. Defaults to null.
32-
/// </summary>
33-
/// <remarks>
34-
/// By default the required policy is null.
35-
///
36-
/// If a required policy has been specified then it is always evaluated, even if there are no
37-
/// <see cref="IAuthorizeData"/> instances for a resource. If a resource has <see cref="IAuthorizeData"/>
38-
/// then they are evaluated together with the required policy.
39-
/// </remarks>
40-
public AuthorizationPolicy RequiredPolicy { get; set; }
41-
4230
/// <summary>
4331
/// Add an authorization policy with the provided name.
4432
/// </summary>

src/Security/Authorization/Core/src/AuthorizationPolicy.cs

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -176,17 +176,6 @@ public static async Task<AuthorizationPolicy> CombineAsync(IAuthorizationPolicyP
176176
}
177177
}
178178

179-
var requiredPolicy = await policyProvider.GetRequiredPolicyAsync();
180-
if (requiredPolicy != null)
181-
{
182-
if (policyBuilder == null)
183-
{
184-
policyBuilder = new AuthorizationPolicyBuilder();
185-
}
186-
187-
policyBuilder.Combine(requiredPolicy);
188-
}
189-
190179
return policyBuilder?.Build();
191180
}
192181
}

src/Security/Authorization/Core/src/DefaultAuthorizationPolicyProvider.cs

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ public class DefaultAuthorizationPolicyProvider : IAuthorizationPolicyProvider
1515
{
1616
private readonly AuthorizationOptions _options;
1717
private Task<AuthorizationPolicy> _cachedDefaultPolicy;
18-
private Task<AuthorizationPolicy> _cachedRequiredPolicy;
1918

2019
/// <summary>
2120
/// Creates a new instance of <see cref="DefaultAuthorizationPolicyProvider"/>.
@@ -40,15 +39,6 @@ public Task<AuthorizationPolicy> GetDefaultPolicyAsync()
4039
return GetCachedPolicy(ref _cachedDefaultPolicy, _options.DefaultPolicy);
4140
}
4241

43-
/// <summary>
44-
/// Gets the required authorization policy.
45-
/// </summary>
46-
/// <returns>The required authorization policy.</returns>
47-
public Task<AuthorizationPolicy> GetRequiredPolicyAsync()
48-
{
49-
return GetCachedPolicy(ref _cachedRequiredPolicy, _options.RequiredPolicy);
50-
}
51-
5242
private Task<AuthorizationPolicy> GetCachedPolicy(ref Task<AuthorizationPolicy> cachedPolicy, AuthorizationPolicy currentPolicy)
5343
{
5444
var local = cachedPolicy;

src/Security/Authorization/Core/src/IAuthorizationPolicyProvider.cs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,5 @@ public interface IAuthorizationPolicyProvider
2222
/// </summary>
2323
/// <returns>The default authorization policy.</returns>
2424
Task<AuthorizationPolicy> GetDefaultPolicyAsync();
25-
26-
/// <summary>
27-
/// Gets the required authorization policy.
28-
/// </summary>
29-
/// <returns>The required authorization policy.</returns>
30-
Task<AuthorizationPolicy> GetRequiredPolicyAsync();
3125
}
3226
}

src/Security/Authorization/Policy/src/AuthorizationMiddleware.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,12 @@ public async Task Invoke(HttpContext context)
5151

5252
// IMPORTANT: Changes to authorization logic should be mirrored in MVC's AuthorizeFilter
5353
var authorizeData = endpoint?.Metadata.GetOrderedMetadata<IAuthorizeData>() ?? Array.Empty<IAuthorizeData>();
54+
if (authorizeData.Count() == 0)
55+
{
56+
await _next(context);
57+
return;
58+
}
59+
5460
var policy = await AuthorizationPolicy.CombineAsync(_policyProvider, authorizeData);
5561
if (policy == null)
5662
{

src/Security/Authorization/test/AuthorizationMiddlewareTests.cs

Lines changed: 0 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -41,25 +41,6 @@ public async Task NoEndpoint_AnonymousUser_Allows()
4141
Assert.True(next.Called);
4242
}
4343

44-
[Fact]
45-
public async Task NoEndpointWithRequired_AnonymousUser_Challenges()
46-
{
47-
// Arrange
48-
var policy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build();
49-
var policyProvider = new Mock<IAuthorizationPolicyProvider>();
50-
policyProvider.Setup(p => p.GetRequiredPolicyAsync()).ReturnsAsync(policy);
51-
var next = new TestRequestDelegate();
52-
53-
var middleware = CreateMiddleware(next.Invoke, policyProvider.Object);
54-
var context = GetHttpContext(anonymous: true);
55-
56-
// Act
57-
await middleware.Invoke(context);
58-
59-
// Assert
60-
Assert.False(next.Called);
61-
}
62-
6344
[Fact]
6445
public async Task HasEndpointWithoutAuth_AnonymousUser_Allows()
6546
{
@@ -79,26 +60,6 @@ public async Task HasEndpointWithoutAuth_AnonymousUser_Allows()
7960
Assert.True(next.Called);
8061
}
8162

82-
[Fact]
83-
public async Task HasEndpointWithRequiredWithoutAuth_AnonymousUser_Challenges()
84-
{
85-
// Arrange
86-
var policy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build();
87-
var policyProvider = new Mock<IAuthorizationPolicyProvider>();
88-
policyProvider.Setup(p => p.GetDefaultPolicyAsync()).ReturnsAsync(policy);
89-
policyProvider.Setup(p => p.GetRequiredPolicyAsync()).ReturnsAsync(policy);
90-
var next = new TestRequestDelegate();
91-
92-
var middleware = CreateMiddleware(next.Invoke, policyProvider.Object);
93-
var context = GetHttpContext(anonymous: true, endpoint: CreateEndpoint());
94-
95-
// Act
96-
await middleware.Invoke(context);
97-
98-
// Assert
99-
Assert.False(next.Called);
100-
}
101-
10263
[Fact]
10364
public async Task HasEndpointWithAuth_AnonymousUser_Challenges()
10465
{
@@ -148,29 +109,23 @@ public async Task OnAuthorizationAsync_WillCallPolicyProvider()
148109
var policy = new AuthorizationPolicyBuilder().RequireAssertion(_ => true).Build();
149110
var policyProvider = new Mock<IAuthorizationPolicyProvider>();
150111
var getPolicyCount = 0;
151-
var getRequiredPolicyCount = 0;
152112
policyProvider.Setup(p => p.GetPolicyAsync(It.IsAny<string>())).ReturnsAsync(policy)
153113
.Callback(() => getPolicyCount++);
154-
policyProvider.Setup(p => p.GetRequiredPolicyAsync()).ReturnsAsync(policy)
155-
.Callback(() => getRequiredPolicyCount++);
156114
var next = new TestRequestDelegate();
157115
var middleware = CreateMiddleware(next.Invoke, policyProvider.Object);
158116
var context = GetHttpContext(anonymous: true, endpoint: CreateEndpoint(new AuthorizeAttribute("whatever")));
159117

160118
// Act & Assert
161119
await middleware.Invoke(context);
162120
Assert.Equal(1, getPolicyCount);
163-
Assert.Equal(1, getRequiredPolicyCount);
164121
Assert.Equal(1, next.CalledCount);
165122

166123
await middleware.Invoke(context);
167124
Assert.Equal(2, getPolicyCount);
168-
Assert.Equal(2, getRequiredPolicyCount);
169125
Assert.Equal(2, next.CalledCount);
170126

171127
await middleware.Invoke(context);
172128
Assert.Equal(3, getPolicyCount);
173-
Assert.Equal(3, getRequiredPolicyCount);
174129
Assert.Equal(3, next.CalledCount);
175130
}
176131

src/Security/samples/CustomPolicyProvider/Authorization/MinimumAgePolicyProvider.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,6 @@ public MinimumAgePolicyProvider(IOptions<AuthorizationOptions> options)
2727

2828
public Task<AuthorizationPolicy> GetDefaultPolicyAsync() => FallbackPolicyProvider.GetDefaultPolicyAsync();
2929

30-
public Task<AuthorizationPolicy> GetRequiredPolicyAsync() => FallbackPolicyProvider.GetRequiredPolicyAsync();
31-
3230
// Policies are looked up by string name, so expect 'parameters' (like age)
3331
// to be embedded in the policy names. This is abstracted away from developers
3432
// by the more strongly-typed attributes derived from AuthorizeAttribute
@@ -49,4 +47,4 @@ public Task<AuthorizationPolicy> GetPolicyAsync(string policyName)
4947
return FallbackPolicyProvider.GetPolicyAsync(policyName);
5048
}
5149
}
52-
}
50+
}

0 commit comments

Comments
 (0)