Можно ли добавить в политику общего доступа больше правил концентратора событий, чем одно?

Создав концентратор событий, я применяю правила. Могу ли я применить, например, правила отправки и прослушивания к одной и той же политике общего доступа?

Код, который я пытаюсь использовать, кажется, «перезаписывает» предыдущее правило. Есть ли лучший способ сделать это?

await eventHub.Update()
   .WithNewSendRule(sendListenRuleNames)
   .WithNewListenRule(sendListenRuleNames)
   .ApplyAsync();

В приведенном выше коде к политике общего доступа будет применено только правило прослушивания.

ОБНОВЛЕНИЕ

Попробовав описанный выше способ, я попытался реализовать, используя комментарий Джея следующим образом:

List<AccessRights> accessRights = new List<AccessRights>();
accessRights.Add(AccessRights.Listen);
accessRights.Add(AccessRights.Manage);

foreach (var listenManageRuleNames in list)
{
   await eventHub.Manager
      .EventHubAuthorizationRules
      .Inner
.CreateOrUpdateAuthorizationRuleWithHttpMessagesAsync(eventHubResource.ResourceGroup.Name, eventHubNamespace.Name, eventHubResource.Name, listenManageRuleNames, accessRights);
}

Но в итоге я получаю эту ошибку:

"{\"error\":{\"message\":\"Error setting value to 'Rights' on 'Microsoft.Cloud.ServiceBus.ResourceProvider.ArmVersionedEntities.ArmAuthorizationRuleDescription'. \",\"code\":\"BadRequest\"}}"

ОБНОВЛЕНИЕ 2. Я просто попробовал использовать только AccessRights.Listen, и это сработало. Сразу после этого я попытался использовать только AccessRights.Manage, но это не сработало и выдало ту же ошибку.


person TyngeOfTheGinge    schedule 06.11.2019    source источник
comment
@JayGong Я обновил свой пост, пожалуйста, посмотрите   -  person TyngeOfTheGinge    schedule 08.11.2019


Ответы (2)


Нашел способ!

List<AccessRights> accessRights = new LinkedList<>();
        accessRights.add(AccessRights.LISTEN);
        accessRights.add(AccessRights.SEND);

azure.eventHubNamespaces().authorizationRules()
                    .manager()
                    .namespaceAuthorizationRules()
                    .inner()
                  .createOrUpdateAuthorizationRule("resourceGroup","namespace","policyname",accessRights);

Получите советы от имени метода REST API и попробовали найти похожие имена в исходном коде.

person Jay Gong    schedule 07.11.2019
comment
Привет, @JayGong, я обновил свой пост выше, чтобы использовать предложенную вами реализацию. Это кажется правильным и должно работать, но затем я столкнулся с ошибкой, указанной выше. - person TyngeOfTheGinge; 08.11.2019
comment
@TyngeOfTheGinge Ваш код использует пакет .net, я прав? - person Jay Gong; 11.11.2019
comment
да, в частности Microsoft.Azure.Management.Eventhub.Fluent - person TyngeOfTheGinge; 11.11.2019
comment
@TyngeOfTheGinge Мой код основан на java, однако я могу воспроизвести вашу проблему на своей стороне, когда я попытаюсь предоставить Manage разрешение eventhubAuthRules. Специально для этого все работает на 100% нормально с namespaceAuthRules тремя разрешениями и eventhubAuthRules разрешениями на прослушивание и отправку. Я хочу знать, такой же ли он, как ты? - person Jay Gong; 14.11.2019
comment
@TyngeOfTheGinge Извините за поздний ответ, но все еще пытаюсь помочь вам решить эту проблему. - person Jay Gong; 14.11.2019

Он должен работать, если вы добавите

accessRights.Add(AccessRights.Send);

Неважно, используете ли вы C # SDK или Java; под водой все они используют один и тот же REST API, с которым вы можете экспериментировать, например. здесь.

Просто добавление прав "Управление" у меня не сработало:

{ "properties": { "rights": [ "Manage" ] } }

предположительно потому, что «Управление» автоматически предоставляет «Отправить» и «Слушать». Это очевидно из диалогового окна при добавлении политики SAS через портал:

введите описание изображения здесь

Изменение полезной нагрузки на

{ "properties": { "rights": [ "Manage", "Listen", "Send" ] } }

исправил это для меня.

person Glorfindel    schedule 04.12.2020