Как фильтровать данные на основе клиентских разрешений вместо широковещания? - PullRequest
0 голосов
/ 03 июня 2019

Я изучаю SignalR.Что-то, что я не могу обернуть вокруг себя, это:

SignalR позволяет нам применять аутентификацию / авторизацию, используя атрибут [Authorize].Это работает для предотвращения вызова клиентами определенного метода в концентраторе.Однако, как заставить это работать наоборот?Как убедиться, что концентратор отправляет уведомления только тем клиентам, которым разрешено просматривать обновления для определенного набора данных?

Например:

Клиент администратора обновляет запись.SignalR должен передать это обновление другим клиентам администратора.Однако выполнение Clients.All.SendAsync приведет к обновлению всех клиентов.Клиенты без прав администратора не должны получать уведомления.

Есть идеи о том, как этого добиться?

1 Ответ

1 голос
/ 03 июня 2019

Вы должны добавить RoleManager и затем отфильтровать Clients.All по Id в другом, чтобы получить только сокращенный список администраторов.

var idsWithPermission = roleManager.FindByName("Admins").Users.Select(iur => iur.Id);
var clients = Clients.AllExcept.Where(u =>! idsWithPermission.Contains(u.Id))/*.SomeHelper()*/;
clients.Send("hello world");
...