如何根据客户端权限而不是广播来过滤数据?

How to filter data based on client permissions instead of broadcasting?

我正在学习 SignalR。我无法理解的是:

SignalR 允许我们使用 [Authorize] 属性应用 authentication/authorization。这可以防止客户端调用集线器上的特定方法。但是,如何使这项工作反过来呢?我如何确保集线器仅将通知推送给有权查看特定数据集更新的客户端?

例如:

一个管理客户端更新了一条记录。 SignalR 应该将此更新推送到其他管理客户端。但是,执行 Clients.All.SendAsync 会将更新推送到所有客户端。非管理员客户端不应收到通知。

知道如何实现吗?

您应该添加一个 RoleManager,然后在其他中按 Id 过滤 Clients.All 以仅获得一个缩减的管理员列表。

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");