我正在建立一个聊天应用程序的信号器中心(它不是真的,但让我们假装它)。 我已经设置了我的授权,以便房间的创建者可以邀请用户进入房间。因此,有一个表存储谁拥有什么,谁被授予访问权限。
这很好。接下来的步骤是添加声明,这样我就不必检查谁可以访问每个请求的内容。当用户尝试加入聊天室,添加他们的声明并将其发送到启动信号器连接的页面时,我会检查一次。
现在我想在我的集线器上使用[authorize]装饰器,而不是抛出样板
user.Claims.Any(x=> x.ClaimType == $"CanJoinRoom_{RoomId}");
随处可见。
我已经了解了如何在此处进行基于自定义策略的授权: https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies#security-authorization-policies-based
我有我需要的每件作品,除了一件:指定房间ID的实际参数。我已经能够破解
的东西了[MyCustomAuthorizeMethod(this.Context.Request.Form["data"])]
但这看起来有点难看,为了使它工作,我必须序列化这个json
{"H":"myhubname","M":"Initialize","A":[39],"I":0}
这看起来真的很烂。我更喜欢将RoomId作为参数传递。 这只是一条线,但似乎是一个世界。是否有一种优雅的方式来做到这一点?