在开发多租户asp.net MVC应用程序时要记住什么?
下午好 – 我今天有一个非常普遍的问题 – 我的任务是创建一个Web应用程序来管理客户的一些基本信息。 这是一个非常简单的应用程序,但我不知道是要记住要开发网站围绕支持他们自己的域或我们url的子域的多个用户?
如何限制用户登录应用程序的其他部分?
我已经看到在Stack Overflow上的类似问题中提到了数据库范围,是否有人可以详细说明这样的实现的最佳实践?
MVC3中是否有任何新function支持多租户? 我在MVC2和我的电子商务网站面临这个问题,我们决定我们希望它为多个店主提供白色标签和可自定义,并且不知道从哪里开始在现有应用程序中实现这些function。 任何输入都表示赞赏。
编辑
详细说明多租户,我的意思是 – 例如,在商店的上下文中,多个用户在www.mystore.com注册他们自己的商店,并且每个用户都有一个唯一的子域来访问他们自己的商店实例,在user1.mystore.com,user2.mystore.com等。每个商店都有订单历史记录的客户,这些客户会有登录。 我需要限制user1.mystore.com的客户在没有新帐户的情况下登录user2.mystore.com,同样阻止user2.mystore.com访问user1.mystore.com的客户历史记录。
我实现了一个完整的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框架在帮助您解决问题方面做得很少。
很可能您将花费相当多的时间来重构数据库。
第一步是你要创建一个表来存放你的“租户”列表。 然后,您需要将此TenantId添加到系统中的每个表中,以确保没有人互相踩踏。 您可以跳过任何全局性的表。 一个示例可能是状态代码列表。
但是,从用户到他们拥有的数据等所有内容都必须具有此ID。 此外,修改所有索引以考虑tenantid。
完成后,您需要修改所有查询以将tenantid考虑在内。
租户表的一列应该是门户URL。 喜欢customername.oursite.com或其他什么。 这样,您可以将多个url指向完全相同的代码。 当站点需要使用当前的tenantid时,只需根据传入的URL查找即可。
如果我这样做,我打算在数据库中为每个表花费大约1到2个小时来使其成为“多租户”。 显然,一些表(及其查询)会更快; 其他人需要更长时间。
顺便提一下,这不包括定制每个租户的UI(外观/感觉)或任何性质的东西。 如果您需要这样做,那么您必须在服务器上为每个租户创建一个目录来保存他们的样式表或直接从DB加载它(它有自己的缓存问题)。
通常,您在项目开始时为此进行设计。 改造已经(或几乎)完整的项目是PITA。
最后,测试,测试,测试并进行更多测试。 您必须确保每个查询仅提取它绝对需要的数据。
有关Sharp Architecture(基于MVC 3)的多租户支持的讨论,请访问: http : //www.yellowfeather.co.uk/2011/02/multi-tenancy-on-sharp-architecture-revisited/
不确定这是否真的可以帮助您使用现有的应用程序,移植将是一项工作。