php – 如何区分Symfony用户角色/组在socket.io聊天 - 代码日志

php – 如何区分Symfony用户角色/组在socket.io聊天

我一直在玩socket.io聊天,我有一个问题:我如何区分一个管理员用户和一个普通用户在聊天室?我希望管理员有权力踢和禁止人,但我的用户不是。

我正在使用Symfony开发我的应用程序,我想使用其用户数据库进行聊天用户。我正在为我的Symfony应用程序的用户使用FOSUserBundle。它们被分成多个组,所以我有管理组和其他组。

管理组具有ROLE_ADMIN,这意味着其中的每个用户都具有该角色。这是管理员组,该组中的每个用户应该具有在聊天室中禁止,踢,静音等权限的权限。

为了在聊天中使用我的Symfony用户,我一直在阅读Redis来获得他们的会话,但我不太清楚如何使我的管理员用户和普通用户有所区别。如何防止普通用户向执行用户无权访问的服务器发出请求?因为任何人都可以执行请求,但是如果来自存储在Apache服务器上的MySQL数据库中的用户,那么如何验证这些请求?

如果不是Symfony,如何在一个常规的PHP应用程序中完成?最后,如何定义管理员,但如何将他连接到Node服务器以及如何使Node服务器与我的用户数据库一起工作并不重要。

我有一个想法,简单地加密并将用户的数据发送到节点服务器,然后在那里解密。只有两台服务器知道私钥,所以即使客户端得到加密数据,他也不能向另一个客户端发出请求。我可以做一些IP检查和时间戳。然后可以使用节点服务器上的解密数据来说明用户是否为管理员,并允许他发送某些请求。这是一个好主意还是有更好的方法?

I had an idea of simply encrypting and sending the user’s data to the node server, then decrypt it there. Only the two servers know the private keys, so even if a client gets its hands on the encrypted data, he can’t make a request with it for another client.

这是基本的想法。

我该怎么办?
我将使用像JWT这样的东西来将userId发送到节点应用程序。不必加密,因为我只关心jwt签名,以确保请求确实是由真正的用户发出的。

之后,使用userId,我将使服务器端调用php应用程序来检查用户的角色。

详细说明:

>节点应用程序和php应用程序将使用共享密码来签名JWT令牌。
> PHP应用程序会将生成的令牌公开到前端。
> socket.io客户端会将身份认证的一部分发送给节点应用程序。

如何处理禁止

>使用他们的用户ID保留打开的套接字列表
>在nodejs应用程序中创建一个Web服务端点,该应用程序可以从php应用程序中获取“禁止”请求。
>当nodejs应用程序接收到这样的请求时,根据用户ID查找套接字并关闭连接。

http://stackoverflow.com/questions/33202813/how-to-differentiate-between-symfony-user-roles-groups-in-socket-io-chat

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:php – 如何区分Symfony用户角色/组在socket.io聊天