Должны ли группы 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.