繁体   English   中英

将单客户Web应用程序转变为多客户应用程序

[英]Tranforming single-customer web application into a multi-customer application

我们已经开发了一个Web应用程序(PHP&Mysql),该应用程序目前是单一客户,即具有不同权限级别的用户都属于同一公司,因此可以访问相同的数据。 我们现在计划将其转换为多客户平台,这意味着不同的用户组必须访问不同的数据集。

一种明显的方法是通过向所有包含客户数据的MySql表添加“所有者”列来分离数据。 困难的部分是更改所有PHP代码以考虑额外的参数。 我们的想法是通过“所有者”列对数据进行预过滤,以便所有进一步的询问查询将始终且仅选择相对于所连接客户的数据。 这样,我们不必更改代码中的每个查询(查询中的表名已被参数化)。 可以使用临时表来完成吗? 我们有一个自定义的PHP类,它处理所有数据库查询,并且您的想法是每次创建该类对象时,使它在临时表中复制连接的客户的数据。 询问查询将自动路由到临时表,而不是原始表,而插入,更新和删除操作将在原始表上执行。 这是可行的方法,还是我们会遇到麻烦? 在这里,性能当然是一个问题。 关于如何处理此问题还有其他建议吗?

编辑

更多信息:用户的登录和身份验证由PHP处理,PHP设置了有关该帐户的多个会话变量。 用户帐户存储在同一数据库中的“用户”表中,该数据库将存储用户查询/编辑的数据。 因此,登录后,我们有一个变量$ _SESSION ['owner'] ,该变量将在整个项目中可用,并将用于标识用户可以查看/编辑的记录。

如果您要求用户使用“ user”值登录,则可以使用所有者和用户构建联接表(我想为s&g添加一个活动标志)。 确实没有添加临时表或视图的好方法,因为每个“所有者”都会有一个视图。 有一种解决方案。 您可以基于连接到user()上的“所有者”表的表创建视图。 因此,例如,如果我有一个名为usertemp(user varchar(40),owner varchar(45))的表,并且我的用户名是'biff'(并且存在于表中),则可以构建一个视图:

create view usertemp_v
as
select user, owner
from usertemp
where user=user();

然后,我可以查询视图:

select *
from usertemp_v;

我将看到的是与我的名字相关联的数据。 但是,请理解,这要求您为用户设置变量,或者用户必须分别登录MySQL。 它还要求权限(IP地址或域)也必须存在于owner_users表中(如果使用user())。

然后,我必须在usertemp中加入我要加入的所有者的主要源表中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM