每个客户端登录Symfony多个数据库


Symfony multiple databases per client login

我正在Symfony2中开发一个Web应用程序。该网站应该为每个客户端提供一个数据库。我的想法是制作一个包含所有组织及其数据库信息的主数据库。但现在我遇到了一些麻烦。

每个客户端都有自己的用户。这些信息应该存储在他们自己的数据库中。所以在我看来,每个客户都应该有自己的登录页面。现在,我开始添加一个前缀来查看您是什么客户端:example.com/{client}/->controllers。。问题是,你不允许在symfony中的登录页面的路由中设置参数!那么,我应该如何确保每个客户都有不同的登录页面呢?

另一件事是安全。确保用户无法将路由参数更改为其他客户端并获得访问权限的最佳方法是什么?

我一直在网上找导游来做我需要做的事。但我找不到任何适合Symfoy2的可靠方法。。大多数情况下,它是半解决方案,例如,通过服务在数据库之间切换。如果有另一个php框架能做得更好,我肯定也会考虑改为它。

我希望你们能给我一些建议。提前谢谢。

您所拥有的是一个多实例数据库结构,每个客户端都有自己独立的数据库,不如使用一个多时态数据库结构,所有客户端都存储在一个数据库中,网站设置基于客户端id,这样就不需要单独的登录页面或数据库切换了。如果这不是一个巨大而重大的项目结构变化,你可以考虑。也会更便宜

如果不可能更改项目结构,那么使用子域而不是url块company.example.com来代替example.com/company

怎么样

在我看来,有两个选项

checkout多实例数据库体系结构

(我想是"云"选项吗?(

1:为每个客户端使用一个子域,在那里你部署了一个不同的面向应用程序来管理数据库,而在你的主应用程序上,生成目录结构,部署symfony应用程序,并管理vhost和dns区域的生成。

2:为了这个解释,我们将使用这个:

Clients=数据库的每个客户端所有者。

用户=客户端的客户端。

每个客户端都使用相同的用户实体。

您提到您知道如何切换数据库,然后在数据库中存储您的客户端信息,包括数据库凭据(user、pass、db等(,并将用户信息存储在各自客户端的数据库中。现在,当您调用example.com/{client}时,您会在数据库中查找该{client}。加载该客户端的数据库信息,切换数据库,让用户登录并执行他/她的操作。显然,如果将数据库凭据存储在会话中,那么处理后续请求会更好。

现在你一定在问:Q: 如果用户在登录后更改了{client},该怎么办?A: symfony注销用户。

或者至少文件是这么说的。

用户登录后,整个user对象被序列化为会议。在下一个请求中,对User对象进行反序列化。然后,id属性的值用于重新查询数据库中的用户对象。最后,新的User对象是与反序列化的User对象进行比较,以确保它们表示相同的用户。例如,如果2 User上的用户名由于某些原因,对象不匹配,则用户将被记录出于安全原因退出。

Q: 但是,如果用户在另一个{client}上有相同的用户/通行证,该怎么办?A: 请记住,id也是序列化的,但如果您还想添加另一层安全性,只需在用户实体中添加一个字段,该字段引用它所属的客户端(在他们自己的数据库中(并对其进行序列化