Авторизация на уровне ресурсов с помощью Signalr - PullRequest
1 голос
/ 23 января 2020

Должны ли группы Signalr создаваться с идентификаторами уровня ресурсов? Например dispatchedTrucks-123 и dispatchedTrucks-456? Таким образом, когда кто-то пытается подключиться к группе, я могу проверить, есть ли у него доступ?

Допустим, есть две компании: Company1 (Id 123) и Company2 (Id 456), каждая компания имеет сотрудников, и каждая компания отправляет свои грузовики.

Если я создаю концентратор Signalr, рекомендуется создать группу dispatchedTrucks для каждого идентификатора компании, а затем проверить, есть ли у этих людей доступ к этой компании. перед добавлением их в группу?

public async Task AddToGroup(string groupName)
{
    var companyId = Context.QueryString["companyId"];

    if (HasAccessToCompany(companyId)){
      await Groups.AddToGroupAsync(Context.ConnectionId, $`{groupName}-{companyId}`); 
    } else {
      // What's the Signalr equivalent of a 403?
    }
}

Итак, позже в приложении я могу транслировать всю группу, поэтому единственное, кто получает сообщение, это те, кто имеет доступ к этому идентификатору компании.

  var companyId = Context.QueryString["companyId"];
  await Clients.Group($`{groupName}-{companyId}`).addDispatchedTruck(name, message);

RESTful эквивалент того, что я пытаюсь выполнить sh:

UserA работает для Company1 (идентификатор 123). UserB работает для Company2 (Id 456).

UserA авторизован только для запроса GET на /company/123/dispatched-trucks UserB авторизован только для запроса GET на /company/456/dispatched-trucks

Если UserA пытается чтобы вызвать ресурсы Company2, возвращается 403. Если UserB пытается вызвать ресурсы Company1, возвращается 403.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...