コード例 #1
0
        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());
            }
        }