是否应使用资源级别ID创建Signalr组?例如dispatchedTrucks-123
和dispatchedTrucks-456
?这样,当有人尝试连接到网上论坛时,我可以检查他们是否具有访问权限?
假设有两个公司:Company1(Id 123)和Company2(Id 456),每个公司都有员工,每个公司都派卡车。
如果我要创建Signalr集线器,最好的做法是为每个companyId创建一个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?
}
}
因此,在稍后的应用程序中,我可以向整个组广播,因此,唯一可以接收该消息的人就是有权访问该companyId的人。
var companyId = Context.QueryString["companyId"];
await Clients.Group($`{groupName}-{companyId}`).addDispatchedTruck(name, message);
我想要完成的RESTful等效项是:
UserA为Company1(Id 123)工作。 UserB为Company2(Id 456)工作。
仅授权UserA向/company/123/dispatched-trucks
发出GET请求
仅授权UserB向/company/456/dispatched-trucks
如果UserA尝试调用Company2的资源,则返回403。 如果UserB尝试调用Company1的资源,则返回403。