2011-02-10 72 views
10

下午好 - 我今天有一个非常普遍的问题 - 我的任务是创建一个Web应用程序来管理客户的一些基本信息。这是一个非常简单的应用程序,但我不知道如何开发网站来支持在他们自己的域或我们网址的子域中的多个用户?开发多租户asp.net MVC应用程序时需要记住什么?

我该如何限制用户登录到应用程序的其他部分?

我见过有关Stack Overflow的类似问题中提到的数据库范围,有没有人可以详细说明这样的实现的最佳实践?

MVC3中是否有任何新功能支持多租户?我面对MVC2和我的电子商务网站这个问题,我们决定我们希望它为多个店主提供白色标签和可定制的功能,并且不知道从哪里开始在现有应用程序中实现这些功能。任何输入赞赏。

编辑

为了详细说明多租户,我的意思 - 在例如商店的情况下,多个用户www.mystore.com注册了自己的店铺,并分别给予唯一的子域来访问他们自己的商店实例,位于user1.mystore.com,user2.mystore.com等。每个商店都有客户订单历史记录,并且这些客户可以登录。我需要限制user1.mystore.com的客户在没有新帐户的情况下登录user2.mystore.com,同样也要阻止user2.mystore.com访问user1.mystore.com的客户历史记录。

回答

20
7

很可能您将花费相当多的时间来重构您的数据库。

第一步是您将创建一个表来容纳您的“租户”列表。然后,您需要将此TenantId添加到系统中的每个表格,以确保没有人在彼此之间行动。您可以跳过任何本质上具有全局性的表格。一个例子可能是状态码列表。

然而,从用户到他们拥有的数据等等都必须有这个ID。另外,修改所有索引以考虑tenantid。

一旦你有了,你需要修改所有的查询来考虑tenantid。

租户表的一列应该是入口网址。像customername.oursite.com或其他。通过这种方式,您可以将多个网址指向完全相同的代码。当网站需要使用当前的tenantid时,只需根据传入的URL查找即可。

如果我这样做了,我打算花费大约1到2小时的时间在数据库中的每个表上花费大约1到2小时“多租户”。显然有些表格(和他们的查询)会更快;别人会花更长的时间。顺便说一句,这不包括像定制每个租户的UI(外观/感觉)或任何性质的东西。如果你需要这样做,那么你必须在服务器上为每个租户创建一个目录来保存他们的样式表或直接从数据库中加载它(这对于缓存来说有它自己的问题)。

通常,您在项目开始时为此进行了设计。改装已经(或几乎)完整的项目是PITA。

最后,测试,测试,测试和做更多的测试。你将不得不确保每一个查询只提取它绝对需要的数据。

+1

本文讨论几种数据库设计:http://msdn.microsoft.com/en-us/library/aa479086.aspx – rboarman 2011-02-11 00:11:17

+0

@rboarman:很好的链接。我忘了那个。 – NotMe 2011-02-11 01:26:54