javascript - Nodejs 中基于角色的聊天系统
问题描述
我已经使用 socket.io 和 nodejs 实现了一个聊天功能。但现在我想实现一个基于角色的聊天应用程序。例如,如果有人想与更高职位的人交流,首先需要发送请求。我已经实现了一个聊天请求系统(类似于好友请求)。但我不知道如何使它基于角色。在这种情况下,访问控制包会有所帮助吗?
我在用户模型中添加了一个角色属性。我想创建一个中间件来检查用户的角色以及它想要向谁发送消息。如果允许,它可以继续“聊天”,但如果不允许,我希望它重定向到请求端点。我想知道这个逻辑是否可行。如果没有,我还能做些什么更好。
编辑:这个带有中间件的解决方案似乎可以工作:)。如果您有更好的想法,请回答我的问题
解决方案
我没有足够的信息来确切了解您的情况,但听起来您不需要访问控制。这是我给你的建议:
- 您需要为每个用户存储一个角色。
- 当某人第一次发送消息时,您检查他们是否可以发送消息,执行类似于此的操作:
const senderRole = 'normal', receiverRole = 'extreme'; // YOU NEED TO FETCH THESE FROM YOUR DB
const roles = ['normal', 'better', 'extreme', 'best'];
if (roles.indexOf(senderRole) < roles.indexOf(receiverRole)) {
// need to ask for request
}
当他们需要请求时,您将打开与接收者的聊天,但在您的数据库中设置聊天模型的特殊设置:(access=false)
当接收者进入应用程序时,他们有一个特殊的聊天部分,使用选项 (access=false) 过滤,当他们批准聊天时,您更改设置并启用聊天返回主队列并显示消息
推荐阅读
- javascript - 按列表中的顺序对 html DOM 元素进行排序
- sql - 如何在 BigQuery 的一列/行中合并多行值
- graphql - 向 graphql 客户端添加多个标头(apollo-boost)
- mysql - 如何计算多列的平均值并在sql server中排除零
- return-value - GNU屏幕结束时如何使GNU屏幕返回最后一个返回码
- sap - ngdbc.jar(2.4.67 或更高版本)是否支持 JRE 11?
- c# - 为什么 openfiledialog 在第二次选择文件后显示“路径不存在”或“灾难性错误”?
- ios - 如何在终止/终止状态下检测 ios 中的传入 GSM 呼叫事件?
- selenium-webdriver - 更改 Edge chromium 上的默认下载位置
- git - 如何用 master 替换我的分支内容?