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

时间:2019-06-03 13:29:31

标签: asp.net-core signalr.client asp.net-core-signalr

我正在学习SignalR。我无法解决的问题是这样的:

SignalR允许我们使用[Authorize]属性应用身份验证/授权。这样可以防止客户端在集线器上调用特定方法。但是,如何使这项工作相反?我如何确保集线器仅将通知推送到那些有权查看特定数据集更新的客户端?

例如:

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

关于如何实现这一目标的任何想法?

1 个答案:

答案 0 :(得分:1)

您应该添加一个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");