设计支持SubSites的ASP.NET应用程序

时间:2009-05-20 22:12:09

标签: asp.net asp.net-mvc multi-tenant

我正在设计一个必须支持“SubSites”的ASP.NET应用程序。

我们的想法是让超级管理员管理所有用户,全局应用程序设置和子站点。每个子网站都有一些自己的设置(例如本地管理员,徽标和欢迎消息),每个SubSite都有自己的注册用户列表。

这与使用诸如Joomla,SharePoint或DotNetNuke之类的CMS非常相似。事实上,我很想使用这样的平台,但其他项目要求阻止我这样做。

我的问题在这一点上非常笼统:

  1. 使用ASP.NET 2.0 Membership如何指定超级管理员并根据他们注册的SubSite 对用户进行分类?
  2. 我如何实施SubSites(应该使用哪些模式等)?我特别感兴趣的是解释其他人如何做到这一点的文章。我想学习其他人获得的最佳实践,而无需花费数天时间深入研究像DotNetNuke这样的大型开源项目的源代码。
  3. 我在ASP.NET MVC 1.0中实现了这一点,所以类似的例子将是最有帮助的。

    <小时/> 的更新: 我喜欢Mike Hadlow implemented multi-tenancy,我决定以他的工作为出发点。有关我如何使用SqlMembershipProvider并且每个租户拥有自己的this post的信息,请参阅isolated database。这解决了“基于子网站”问题的会员资格。

2 个答案:

答案 0 :(得分:4)

您尝试的内容通常被称为“multitenancy”,而不是“子网站”

对此有一个similar question,接受的答案听起来似乎有道理。

答案 1 :(得分:2)

请原谅我,如果我不明白“子网站”的含义,您是否使用该术语来指代在大型主站点中创建迷你站点的想法?如果是这样,我想我明白你想做什么,但我不得不说asp.net 2.0中的会员系统是一个非常多的框架,你需要在其中进行操作来创建你想要的东西。

无论如何,将如何做到(这是基于开箱即用的.net成员资格):

ASP.NET允许您将“角色”附加到用户,并将“个人资料”属性附加到这些用户。配置文件用于将诸如“电话号码”和其他元数据之类的内容附加到用户,但您也可以使用它来将他们的家庭“子网站”附加到他们身上。

我会创建一个名为'globaladmin'的角色,创建自己作为用户,然后将您(并且只有您)分配给该角色。然后,我会创建一个“siteadmin”角色并将每个子网站的管理员用户分配给该角色,但要非常小心地为他们分配一个“网站”配置文件条目,该条目的值与他们管理的网站相对应。

例如,'user123'将分配给'siteadmin'角色,他们的'site'个人资料属性可能是'subsitexyz'。然后,他们将被识别为该网站的管理员。

以上是可行的但是如果你真的想让它尽可能光滑,创建你自己的MembershipProvider(SubsiteMembershipProvider)并创建一个新的SubsiteMembershipUser类,它继承了你的新提供者返回的MembershipUser。然后,您可以将自己的属性添加到SubsiteMembershipUser,您的应用可以查询该属性以找出该用户所属的网站:

//get current logged on user - cast it to our custom membership user object
SubsiteMembershipUser thisUser = (SubsiteMembershipUser)GetUser(); 
if(thisUser.SubsiteName == SiteUserIsBrowsingString
&& Roles.IsUserInRole(thisUser.UserName, "siteadmin"))
  //user is admin for this site so do something