private List<ExtendedAuthorizationRule> GetAuthorizationRulesToFilter(AuthorizationRuleFilterOption options)
{
if (!string.IsNullOrEmpty(options.EntityName))
{
return GetAuthorizationRuleCore(
options.Namespace,
options.EntityName,
options.EntityType,
r => true);
}
else if (options.EntityTypes != null && options.EntityTypes.Count > 0)
{
NamespaceManager namespaceManager = CreateNamespaceManager(options.Namespace);
List<ExtendedAuthorizationRule> rules = new List<ExtendedAuthorizationRule>();
options.EntityTypes = options.EntityTypes.Distinct().ToList();
foreach (ServiceBusEntityType type in options.EntityTypes)
{
switch (type)
{
case ServiceBusEntityType.Queue:
rules.AddRange(namespaceManager.GetQueues()
.SelectMany(e => e.Authorization
.Select(r => CreateExtendedAuthorizationRule(
r,
options.Namespace,
e.Path,
ServiceBusEntityType.Queue))));
break;
case ServiceBusEntityType.Topic:
rules.AddRange(namespaceManager.GetTopics()
.SelectMany(e => e.Authorization
.Select(r => CreateExtendedAuthorizationRule(
r,
options.Namespace,
e.Path,
ServiceBusEntityType.Topic))));
break;
case ServiceBusEntityType.Relay:
rules.AddRange(namespaceManager.GetRelaysAsync().Result
.SelectMany(e => e.Authorization
.Select(r => CreateExtendedAuthorizationRule(
r,
options.Namespace,
e.Path,
ServiceBusEntityType.Relay))));
break;
case ServiceBusEntityType.NotificationHub:
rules.AddRange(namespaceManager.GetNotificationHubs()
.SelectMany(e => e.Authorization
.Select(r => CreateExtendedAuthorizationRule(
r,
options.Namespace,
e.Path,
ServiceBusEntityType.NotificationHub))));
break;
default: throw new InvalidOperationException();
}
}
return rules;
}
else
{
return ServiceBusClient.Namespaces.ListAuthorizationRules(options.Namespace)
.AuthorizationRules
.Select(ar => ar.ToSharedAccessAuthorizationRule())
.Select(r => CreateExtendedAuthorizationRule(r, options.Namespace))
.ToList();
}
}