MVC 4 Razor解决方案中的2个simplemember实例



我有一个客户端解决方案,我正在工作,正在构建在。net MVC 4 Razor包含以下内容;

  1. 带有客户端登录区的公共网站。
  2. 私人公司web应用程序,用于运行公司。这里不是网站服务区。
  3. 这些是独立的应用程序。公司应用将作为子域名运行。
  4. 它们都运行在同一个SQL数据库上。

这个问题。我将以simplembership的单独实例结束,每个应用程序一个。然而,我将以两组webpages_表结束,这些表是用simplembership为角色等创建的。据我所知,我不能更改这些表的名称。我可以毫无问题地更改User表名,这样我就可以使用users和adminusers。我曾考虑过使用我自己开发的旧登录模式作为替代方案。关于做我想做的事情有什么建议或文章吗?

您将不得不解决这个问题,因为您无法更改默认的webpages_前缀,或者(AFAIK)表所在的数据库模式。

Simple Membership提供程序被设计为高度可定制的,但是使用它将为您节省大量的工作,而不是滚动您自己的提供程序。因此,让我们假设更好的选择是找到一种使用它的方法。解决方案是:

  • 两个数据库;或
  • 如果你被困在一个单一的数据库,那么你可以使用角色来分离你的用户。

使用角色的唯一一个小缺点是,您将不得不在UserProfile类上更加努力地工作。通常,您会在这个类中添加任何额外的用户属性。如果您的两个站点使用不同的用户属性,则必须使用共享主键关联之类的东西对表进行水平分区。

在我看来,这实际上比在不同的数据库中维护两组单独的Simple Membership表,甚至在同一个数据库中维护两组单独的Simple Membership表要少得多。无论如何,这并不是那么糟糕,像"LastLoginAt"这样的共享属性可以进入UserProfile(因此您可以为两个站点开发一个公共库),而像"InternalExtensionNumber"这样的站点特定属性可以进入特定于您公司用户的分区表。

缺点是什么?如果有人可以访问用户角色表,他们可以分配一个公共用户来访问私有站点。也就是说,如果有人有权在用户角色表中这样做,那么您可能已经受到了损害,而且情况不会更糟。

的例子:

如果每个在站点1注册的用户都被赋予一个角色"PublicUser",每个在站点2注册的用户都被赋予一个角色"AdminUser",那么在给定的站点中强制执行一个强制角色就不难了,例如,你可以在公司应用程序中装饰每个需要授权的控制器:

[Authorize(Roles = "PrivateUser")]

或者您可以跨整个站点对站点角色强制授权。为此,您可以使用AuthorizeAttribute并将该属性注册为站点过滤器,然后使用AllowAnonymousAttribute来允许访问公共方法:

// Add this to global.asax.cs to enforce authorization on all controllers.
public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{
  filters.Add(new HandleErrorAttribute());
  //  Add a setting to the web.config to specify the site role, 
  //  and then you can use the same value consistently when
  //  registering users and assigning them a role.
  string siteRole = System.Configuration.ConfigurationManager.AppSettings["SiteRole"];
  filters.Add(new System.Web.Mvc.AuthorizeAttribute() { Roles = siteRole });
}

如果您想要更进一步,您可以通过创建您自己的并在站点或控制器级别适当地使用它来扩展authorize属性。

最新更新