【问题标题】:Role Management Symfony and NodeJs角色管理 Symfony 和 NodeJs
【发布时间】:2025-12-11 04:55:01
【问题描述】:

我目前正在处理一个 Symfony 项目(我们称之为example.com),我需要在该项目上更改角色管理。我已经根据新的角色层次结构修改了 php 代码。

但是,我们还有一个 NodeJS 服务器负责视频流服务。当客户端连接到 Web 服务时,他访问的网页(example.com/webcam 由 symfony/twig 生成)包含 JS 打开到 Socket 的连接。此套接字直接连接到运行在自定义端口 (wss://example.com:9900) 上的 nodeJS 服务器。

下图总结了这一点。

正如我之前所说,我需要包含角色管理。然而,目前,关于角色的一切都位于 symfony 代码中。我真的不想将它导出到 nodeJS 服务器,因为以后维护它会更困难(需要修改的两个地方),而且据我所知,在 nodeJS 中没有完全相同的角色管理。

所以我考虑让 websocket 流量通过 symfony 传递,然后将其发送回客户端,如下面的架构所示

但是:

  • 我不知道这是否是最好的方法,所以如果您知道另一种方法,或者您认为在两个网络服务器上复制角色管理逻辑会更好,我会感谢您的建议
  • 如果这是一个很好的方法,我如何在 symfony 上创建一个高效的 websocket 来重定向流量?

【问题讨论】:

  • 不知道如何帮助您解决问题,但我确实喜欢您的图片。
  • 您有单独的服务器来存储数据库吗?在这种情况下,将所有可用角色也存储在数据库中并检查用户是否可以通过 Node.js 直接在数据库中访问正确的角色
  • 是的,角色存储在另一个数据库中,因此我可以使用 Symfony 和 nodeJS 访问它们。但是,角色层次结构存储在 yml symfony 文件中。因此,如果我想知道用户拥有的每一项权利,我需要同时访问数据库和配置文件。但是,是的,这是另一种可能性。

标签: php node.js symfony


【解决方案1】:

我认为对于这个问题并没有真正的开箱即用的解决方案。为了在 Symfony 和 Node.js 服务器之间共享角色,有必要在一个地方(例如在数据库中)定义它们,然后从那里将它们注入两个服务器。在 Symfony 中,您可以将角色层次结构保存到数据库中:see example here

通过这种方式,您有一个存储角色的点,这意味着 Node.js 服务器可以从数据库中读取所有角色。

注意:示例的 cmets 中有人提到此示例不适用于 Symfony 2.8(您没有指定您的 Symfony 版本)。如果你使用 Symfony 2.8,你可以使用 this unmaintained bundle 作为灵感。

【讨论】:

    【解决方案2】:

    我只能建议使用 JWT auhtentication 并每次调用 symfony 并检查令牌是否正确,或者您可以将密钥(pem 文件)存储在 nodejs 服务器和 symfony 发出令牌中并检查令牌在 nodejs 中是否有效服务器,并且在令牌中您可以放置​​角色。

    另一个解决方案是使用 OAuth2 并在那里进行身份验证。

    【讨论】: