private List<ExtendedAuthorizationRule> FilterAuthorizationRules(AuthorizationRuleFilterOption options)
{
List<ExtendedAuthorizationRule> rules = GetAuthorizationRulesToFilter(options);
List<ExtendedAuthorizationRule> result = new List<ExtendedAuthorizationRule>();
if (!string.IsNullOrEmpty(options.Name))
{
result.Add(rules.FirstOrDefault(r => r.Name.Equals(options.Name,StringComparison.OrdinalIgnoreCase)));
}
else
{
List<ExtendedAuthorizationRule> permissionMatch = new List<ExtendedAuthorizationRule>();
List<ExtendedAuthorizationRule> ruleTypeMatch = new List<ExtendedAuthorizationRule>();
if (options.Permission != null && options.Permission.Count > 0)
{
permissionMatch
.AddRange(
rules.FindAll(r => r.Permission.OrderBy(a => a).SequenceEqual(options.Permission.OrderBy(a => a))));
}
if (options.AuthorizationType != null && options.AuthorizationType.Count > 0)
{
ruleTypeMatch.AddRange(
rules.FindAll(r => r.Rule.ClaimType.Any(t => options.AuthorizationType.Any(m => m.Equals(t)))));
}
result = permissionMatch.Count > 0 ? permissionMatch : rules;
result = ruleTypeMatch.Count> 0 ? result.Union(ruleTypeMatch).ToList() : result;
}
return result == null ? new List<ExtendedAuthorizationRule>() : result;
}