Signalr的资源级别授权

时间:2020-01-23 20:34:51

标签: signalr

是否应使用资源级别ID创建Signalr组?例如dispatchedTrucks-123dispatchedTrucks-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

发出GET请求

如果UserA尝试调用Company2的资源,则返回403。 如果UserB尝试调用Company1的资源,则返回403。

0 个答案:

没有答案