下午好 - 今天我有一个非常普遍的问题 - 我的任务是创建一个Web应用程序来管理客户的一些基本信息。这是一个非常简单的应用程序,但我不知道要记住的是开发网站围绕支持他们自己的域或我们网址的子域的多个用户?
如何限制用户登录应用的其他部分?
我在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的客户历史记录。
答案 0 :(得分:20)
我实现了一个完整的MVC多租户应用程序。以下是我发现的一些链接和一些示例应用程序:
http://msdn.microsoft.com/en-us/library/aa479086.aspx
http://codeofrob.com/archive/2010/02/14/multi-tenancy-in-asp.net-mvc-controller-actions-part-i.aspx
http://msdn.microsoft.com/en-us/library/aa479086.aspx#mlttntda_cc
http://lukesampson.com/post/303245177/subdomains-for-a-single-application-with-asp-net-mvc
http://code.google.com/p/multimvc/
http://www.paulstovell.com/widgets
http://www.agileatwork.com/bolt-on-multi-tenancy-in-asp-net-mvc-with-unity-and-nhibernate/
http://ayende.com/blog/3530/multi-tenancy-approaches-and-applicability
http://weblogs.asp.net/zowens/archive/tags/Multi-tenancy/default.aspx
http://cloudsamurai.codeplex.com/
http://cloudninja.codeplex.com/
http://msdn.microsoft.com/en-us/library/hh534484.aspx
http://blog.maartenballiauw.be/post/2009/05/20/ASPNET-MVC-Domain-Routing.aspx
http://blog.tonywilliams.me.uk/asp-net-mvc-2-routing-subdomains-to-areas
即使从头开始,你也会受到伤害。 MVC框架在帮助您解决问题方面做得很少。
答案 1 :(得分:7)
您很可能会花费相当多的时间重构数据库。
第一步是你要创建一个表来存放你的“租户”列表。然后,您需要将此TenantId添加到系统中的每个表中,以确保没有人互相踩踏。您可以跳过任何全局性的表。一个例子可能是状态代码列表。
但是,从用户到他们拥有的数据等所有内容都必须具有此ID。此外,修改所有索引以考虑tenantid。
完成后,您需要修改所有查询以将tenantid考虑进去。
租户表的一列应该是门户网址网址。喜欢customername.oursite.com或其他什么。这样您就可以将多个网址指向完全相同的代码。当站点需要使用当前的tenantid时,只需根据传入的URL进行查找。
如果我这样做,我打算在数据库中为每个表花费大约1到2个小时来使其成为“多租户”。显然,一些表(及其查询)会更快;其他人需要更长时间。
顺便提一下,这不包括定制每个租户的UI(外观/感觉)或任何此类性质的内容。如果您需要这样做,那么您必须在服务器上为每个租户创建一个目录来保存他们的样式表或直接从DB加载它(它有自己的缓存问题)。
通常,您在项目开始时为此进行设计。重新安装已经(或几乎)完整的项目是PITA。
最后,测试,测试,测试并进行更多测试。您必须确保每个查询仅提取它绝对需要的数据。
答案 2 :(得分:1)
有一些关于Sharp Architecture(基于MVC 3)的多租户支持的讨论在这里找到:http://www.yellowfeather.co.uk/2011/02/multi-tenancy-on-sharp-architecture-revisited/
不确定这对您现有的应用程序是否真的有帮助,移植将是一项工作。