3

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

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

这与使用 Joomla、SharePoint 或 DotNetNuke 等 CMS 获得的结果非常相似。事实上,我很想使用这样的平台,但其他项目要求阻止我这样做。

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

  1. 使用ASP.NET 2.0 Membership我将如何指定超级管理员并根据用户注册的 SubSite 对用户进行分类
  2. 我将如何实现子站点(应该使用什么模式等)?我对解释其他人如何做到这一点的文章特别感兴趣。我想学习其他人已经获得的最佳实践,而无需花费数天时间深入研究像 DotNetNuke 这样的大型开源项目的源代码。

我在 ASP.NET MVC 1.0 中实现了这一点,所以类似的例子会很有帮助。


更新: 我喜欢Mike Hadlow 实现多租户的方式,我决定以他的工作为起点。有关我如何使用每个拥有自己独立数据库的租户的信息,请参阅这篇文章。这解决了我的会员资格“基于子网站”的问题。SqlMembershipProvider

4

2 回答 2

4

您正在尝试的通常称为“多租户”,而不是“子站点”

有一个与此类似的问题,接受的答案听起来很合理。

于 2009-05-21T01:39:59.367 回答
2

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

无论如何,会怎么做(这是基于开箱即用的.net Membership):

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

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

例如,“user123”将分配给“siteadmin”角色,他们的“站点”配置文件属性可以是“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
于 2009-05-20T22:33:07.577 回答