在asp.net中添加其他链接成员资格提供程序

时间:2014-06-26 00:57:23

标签: asp.net asp.net-membership membership-provider

我在asp.net(混合webforms + mvc4)应用程序上工作,该应用程序向各个组织的员工提供专家演讲者的视频。我目前使用asp.net会员资格来根据用户所在的公司(每家公司都有登录名)对用户进行身份验证,设置角色以确定他们有权访问哪些视频,以及构建报告等。

但是,我的公司也希望开始为个人用户添加登录信息。重写我们的整个会员系统本质上意味着重建网站的大部分 - 而我正在考虑为个人添加另一个会员提供商,这些人将映射到我们已经为组织提供的会员提供商。我想象的是以下

1)用户使用个人会员框架

使用他们的用户名和密码登录

2)应用程序将用户映射到原始(公司)成员资格框架中的相应成员,并根据用户的组织自动对该成员资格的用户进行身份验证(用户不可见),在该用户中,用户可以分配正确的角色等属于。基本上,这第二个成员资格几乎是原始的一层。

我正在考虑为SQL Server中的个人用户构建扩展表,这些表将映射到我们当前的公司成员 - 但是,我更愿意为映射到原始成员资格提供者的各个用户使用另一个成员资格提供者,因为这样可以节省写入所有CRUD代码,忘记密码和会员框架附带的api。我只是想知道这是否可能,或者在这种情况下最佳做法是什么。

1 个答案:

答案 0 :(得分:0)

我对您的要求的理解是,您基本上需要将所有会员提供商合并为一个人(仅对所有用户使用一个登录),并利用您当前会员提供商的现有实施。< / p>

根据您的要求,我认为您可以使用自定义的登录视图,并在用户身份验证过程中映射正确的成员资格提供程序。

为了澄清我的假设,假设您在项目解决方案中有这两个现有的提供者:

<membership>
  <providers>
    <clear/>
    <add name="Organization1" type="MvcApplication.Organization1" />
    <add name="Organization2" type="MvcApplication.Organization2" />
    ....

如果用户有效,您将切换并保存正确的提供者。

public ActionResult LogOn(LogOnModel model, string returnUrl)
{
  if (ModelState.IsValid)
  {
      var membershipProvider1 = Membership.Providers["Organization1"];
      if (membershipProvider1.ValidateUser(model.UserName, model.Password))
      {
         // save this provider on server memory while user's logged-in
         return Redirect(returnUrl);
      }

      var membershipProvider2 = Membership.Providers["Organization2"];
      if (membershipProvider2.ValidateUser(model.UserName, model.Password))
      {
         // save this provider on server memory while user's logged-in
         return Redirect(returnUrl);
      }

      ModelState.AddModelError("", "The user name or password provided is incorrect.");
      return View(model);
  }
}

这可能不是您想要的,但通过一些修改,它可以帮助您实现您的目标。