angularjs - Socket.io - 向不同权限级别的用户广播的策略

标签 angularjs node.js laravel socket.io

使用 socket.io 向其他监听器广播事件和数据是一种直接的方式,因为每个人都可以看到数据。但是,当每个用户只允许查看属于他们的数据时,我可以使用一些策略吗?

例如,我们有一个订单系统。在仪表板上,某些用户可以根据其访问级别查看所有订单。因此,如果一个用户更新了订单,我可以将该事件广播给所有其他用户,而无需为仪表板上打开的每个窗口检索新数据,对吗?

所以也许一个例子是来自客户端的 socket.send('ordersUpdated', data) ,我认为 Node 服务器可以捕获它并将数据发送到另一个套接字监听该 ordersUpdated 事件。

但是如果用户只能看到自己的订单怎么办?我无法向他们广播相同的数据,因为此级别的每个用户只能看到自己的数据。如果他们的其中一个订单被可以查看所有订单的用户修改了怎么办?他们的仪表板也需要更新,但他们无法接收相同的广播数据。

我应该有什么特殊的方法来解决这个问题吗?一种想法,虽然我认为不是一个好想法,但只是发送一个事件来说明某些内容已更新,这将导致他们从服务器重新获取数据。

为了提供更多详细信息,我还使用 Angular 和 Laravel。

最佳答案

一种可能性是使用聊天室来管理具有给定访问级别的用户组。例如,您可以拥有一系列按权限级别命名的房间。当用户连接到服务器并验证他们的身份时,您可以将他们放入他们所属的任何聊天室(根据他们的权限级别)。最高级别的权限(允许查看所有订单)可能称为“all_orders”。

然后,当订单发生更改时,您可以将其广播给 all_orders 中的每个人以及与更改一致的任何其他聊天室。您还需要通知与订单直接关联的用户。

使用聊天室的优点是您可以使用内置的 socket.io 方案来跟踪用户组并向他们广播。您的服务器代码仍然有责任确定应该向哪组用户通知给定的订单,但 socket.io 将管理管理一组用户并向他们广播的机制。使用聊天室的另一个优点是当用户断开连接时,socket.io 会自动从所有关联的聊天室中删除该套接字。如果您对组使用自己的数据结构,则必须在连接时删除给定的套接字,以避免内存泄漏。

关于angularjs - Socket.io - 向不同权限级别的用户广播的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38087564/

相关文章:

javascript - 名字和姓氏在 mongoDB 中组合搜索

javascript - Laravel 中的 Vue Bootstrap 日历

javascript - Auth0 将自定义声明添加到用户配置文件

javascript - 使用 AngularJS 验证单选按钮集

javascript - AngularJS:仅当复选框被选中时,将一个输入框的值复制到另一个输入框

javascript - 将属性 Id 设置为 uibModal

node.js - 无法启动nodejs+express基本程序

php - 对具有不确定数据的数组进行排序

php - 无法安装所需版本的 Laravel

angularjs - 在 Controller 中调用 angular $setValidity