C# 阻止用户进入房间的信号器

C# 阻止用户进入房间的信号器,c#,.net,websocket,signalr,C#,.net,Websocket,Signalr,我正在将SignalR应用到现有项目中,以实现用户之间的实时通信 我已经让基本设置正常工作,当人们提供组ID时,他们可以加入后端集线器中的“组” 我的方式是这样设置的,用户可以邀请其他用户到一个房间,我只希望用户能够加入,如果他们在允许加入的列表中。在我的hub-OnConnection方法中,我设置了一个简单的测试条件,检查尝试连接的用户是否允许进入该房间,如果不允许,将使用onDisconnect方法对其进行过滤 我只是想看看这是不是做这件事的最好方法,还是我完全错了。显然,大多数检查用户是

我正在将SignalR应用到现有项目中,以实现用户之间的实时通信

我已经让基本设置正常工作,当人们提供组ID时,他们可以加入后端集线器中的“组”

我的方式是这样设置的,用户可以邀请其他用户到一个房间,我只希望用户能够加入,如果他们在允许加入的列表中。在我的hub-OnConnection方法中,我设置了一个简单的测试条件,检查尝试连接的用户是否允许进入该房间,如果不允许,将使用onDisconnect方法对其进行过滤

我只是想看看这是不是做这件事的最好方法,还是我完全错了。显然,大多数检查用户是否可以加入文件室的工作都是在客户端完成的,但我也希望进行一些后端检查

public override async Task OnConnectedAsync()
{
    var emailAddress = Context.User.FindFirst(ClaimTypes.Email)?.Value;
    var user = await _userRepository.GetUserByEmailAsync(emailAddress);

    var httpContext = Context.GetHttpContext();
    var studyRoomId = httpContext.Request.Query["RoomId"].ToString();

    if (!(await isUserInRoomAsync(user.Id, int.Parse(studyRoomId))))
    {
        await OnDisconnectedAsync(new Exception("user is not part of this room!"));
        return;
    }
            
    await Groups.AddToGroupAsync(Context.ConnectionId, studyRoomId);

    await Clients.Group(studyRoomId).SendAsync("update", "User has joined the Room!");
}

public override async Task OnDisconnectedAsync(Exception exception)
{
    await base.OnDisconnectedAsync(exception);
}

private async Task<Boolean> isUserInRoomAsync(int userId, int roomNumber) //returns true if user is allowed in group, and false if not allowed. 
{
   return await _roomRepository.isUserInRoom(roomNumber, userId);
}

公共覆盖异步任务OnConnectedAsync()
{
var emailAddress=Context.User.FindFirst(ClaimTypes.Email)?.Value;
var user=await\u userRepository.GetUserByEmailAsync(emailAddress);
var httpContext=Context.GetHttpContext();
var studyRoomId=httpContext.Request.Query[“RoomId”].ToString();
if(!(wait isUserInRoomAsync(user.Id,int.Parse(studyRoomId)))
{
等待OnDisconnectedAsync(新的异常(“用户不是此房间的一部分!”);
返回;
}
wait Groups.AddToGroupAsync(Context.ConnectionId,studyRoomId);
等待Clients.Group(studyRoomId.SendAsync(“更新”,“用户已加入会议室!”);
}
公共覆盖异步任务OnDisconnectedAsync(异常)
{
等待base.OnDisconnectedAsync(异常);
}
私有异步任务isUserInRoomAsync(int userId,int roomNumber)//如果组中允许用户,则返回true;如果不允许,则返回false。
{
return wait_roomRepository.isUserInRoom(roomNumber,userId);
}
对于我是否以正确的方式进行此操作的任何建议,我们将不胜感激:)