Remove OfType allocations (#906)

This commit is contained in:
Ryan Brandenburg 2016-07-25 16:31:27 -07:00 committed by GitHub
parent 7235007a9f
commit 651815c282
2 changed files with 7 additions and 6 deletions

View File

@ -122,28 +122,28 @@ namespace Microsoft.AspNetCore.Authorization
var policyBuilder = new AuthorizationPolicyBuilder(); var policyBuilder = new AuthorizationPolicyBuilder();
var any = false; var any = false;
foreach (var authorizeAttribute in authorizeData.OfType<AuthorizeAttribute>()) foreach (var authorizeDatum in authorizeData)
{ {
any = true; any = true;
var useDefaultPolicy = true; var useDefaultPolicy = true;
if (!string.IsNullOrWhiteSpace(authorizeAttribute.Policy)) if (!string.IsNullOrWhiteSpace(authorizeDatum.Policy))
{ {
var policy = await policyProvider.GetPolicyAsync(authorizeAttribute.Policy); var policy = await policyProvider.GetPolicyAsync(authorizeDatum.Policy);
if (policy == null) if (policy == null)
{ {
throw new InvalidOperationException(Resources.FormatException_AuthorizationPolicyNotFound(authorizeAttribute.Policy)); throw new InvalidOperationException(Resources.FormatException_AuthorizationPolicyNotFound(authorizeDatum.Policy));
} }
policyBuilder.Combine(policy); policyBuilder.Combine(policy);
useDefaultPolicy = false; useDefaultPolicy = false;
} }
var rolesSplit = authorizeAttribute.Roles?.Split(','); var rolesSplit = authorizeDatum.Roles?.Split(',');
if (rolesSplit != null && rolesSplit.Any()) if (rolesSplit != null && rolesSplit.Any())
{ {
var trimmedRolesSplit = rolesSplit.Where(r => !string.IsNullOrWhiteSpace(r)).Select(r => r.Trim()); var trimmedRolesSplit = rolesSplit.Where(r => !string.IsNullOrWhiteSpace(r)).Select(r => r.Trim());
policyBuilder.RequireRole(trimmedRolesSplit); policyBuilder.RequireRole(trimmedRolesSplit);
useDefaultPolicy = false; useDefaultPolicy = false;
} }
var authTypesSplit = authorizeAttribute.ActiveAuthenticationSchemes?.Split(','); var authTypesSplit = authorizeDatum.ActiveAuthenticationSchemes?.Split(',');
if (authTypesSplit != null && authTypesSplit.Any()) if (authTypesSplit != null && authTypesSplit.Any())
{ {
foreach (var authType in authTypesSplit) foreach (var authType in authTypesSplit)

View File

@ -45,6 +45,7 @@ namespace Microsoft.AspNetCore.Authorization
/// <returns>The named <see cref="AuthorizationPolicy"/>.</returns> /// <returns>The named <see cref="AuthorizationPolicy"/>.</returns>
public virtual Task<AuthorizationPolicy> GetPolicyAsync(string policyName) public virtual Task<AuthorizationPolicy> GetPolicyAsync(string policyName)
{ {
// MVC relies on DefaultAuthorizationPolicyProvider providing the same policy for the same requests.
return Task.FromResult(_options.GetPolicy(policyName)); return Task.FromResult(_options.GetPolicy(policyName));
} }
} }