我正在设计一个必须支持“SubSites”的ASP.NET应用程序。
我们的想法是让超级管理员管理所有用户,全局应用程序设置和子站点。每个子网站都有一些自己的设置(例如本地管理员,徽标和欢迎消息),每个SubSite都有自己的注册用户列表。
这与使用诸如Joomla,SharePoint或DotNetNuke之类的CMS非常相似。事实上,我很想使用这样的平台,但其他项目要求阻止我这样做。
我的问题在这一点上非常笼统:
我在ASP.NET MVC 1.0中实现了这一点,所以类似的例子将是最有帮助的。
<小时/> 的更新: 我喜欢Mike Hadlow implemented multi-tenancy,我决定以他的工作为出发点。有关我如何使用SqlMembershipProvider
并且每个租户拥有自己的this post的信息,请参阅isolated database。这解决了“基于子网站”问题的会员资格。
答案 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