【问题标题】:ASP.NET Membership/Roles - how to link user to multiple applications/roles?ASP.NET 成员/角色 - 如何将用户链接到多个应用程序/角色?
【发布时间】:2012-01-04 16:00:02
【问题描述】:

我正在开展一个项目,将一个大型网站拆分为更小、更具体的网站。我需要能够将这些网站的访问权限限制为只有具有必要权限的用户才能访问,并且希望尽可能利用现有的成员资格/角色数据模型。

因此,理想情况下,我想将多个应用程序(如 aspnet_applications 表中定义的)和应用程序特定角色 (aspnet_roles) 分配给单个用户。但是,aspnet 成员模型似乎不允许这样做,因为 aspnet_users 和 aspnet_membership 记录包含特定的 applicationID。

如何将单个用户分配给多个应用程序/角色?

【问题讨论】:

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


    【解决方案1】:

    如果您不希望您的数据链接到一个应用程序,也许除了标准 SqlMembership 提供程序之外,您可以考虑使用自定义 management/role 提供程序。

    它具有更大的数据源使用灵活性,例如,您可以在数据库中使用自己的表来存储成员/角色信息,并在多个应用程序中使用这些表等。

    您甚至可以走得更远,例如您可以实现自定义成员资格和角色提供程序并创建一个单独的模块(程序集),然后在您的多个应用程序中重用该模块。

    【讨论】:

    • 据我了解,sql 成员资格提供程序允许使用多个应用程序。实际上,有一个名为“aspnet_applications”的表,它存储了其余模式链接到的应用程序的 id、名称和描述。
    • @aleafonso - 当然,你是对的,我只是想通过为你的答案提供另一种选择来遮蔽一些光线。为您的答案 +1。
    • @BojanSkrchevski - 谢谢,我们可能需要自定义提供程序,阅读了您的博文,非常有用。
    • @MarcusGuinane - 总是乐于提供帮助;)
    【解决方案2】:

    我用过my sql members provider,在设计上我觉得它和sql provider没有太大区别。

    为了将同一个用户关联到不同的角色,应该有一个名为 asp_net_usersinroles 的表。在该表中,您可以插入具有不同角色 ID 的相同用户 ID,以便允许用户拥有多个角色。

    同样,您需要创建 UI 以允许管理员用户分配不同的角色。在我的例子中,我使用 ListBox 来显示应用程序中的现有角色,它允许多选。

    希望这会有所帮助。

    【讨论】:

    • 感谢您的信息,我们肯定会使用 aspnet_usersinroles 表。
    【解决方案3】:

    您可以在代码中设置成员资格检查的 ApplicationName。

    我有一个管理应用程序,可以控制一系列其他应用程序的所有内容。我希望该应用程序中的用户能够登录到所有其他应用程序,因此如果默认应用程序中的用户登录失败,我会检查“管理”应用程序。这就是我的登录部分。注意 "Membership.ApplicationName = "Administration";" 这一行

    if (Membership.ValidateUser(model.UserName, model.Password))
    {
        FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
        if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
            && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
        {
            return Redirect(returnUrl);
        }
        else
        {
            return RedirectToAction("Index", "Home");
        }
    }
    else
    {
        Membership.ApplicationName = "Administration";
        if (Membership.ValidateUser(model.UserName, model.Password))
        {
            FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
            if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && retu    rnUrl.StartsWith("/")
                && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
            {
                return Redirect(returnUrl);
            }
            else
            {
                return RedirectToAction("Index", "Home");
            }
        }
        else
        {
            ModelState.AddModelError("", "The user name or password provided is incorrect.");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-03-31
      • 1970-01-01
      • 1970-01-01
      • 2012-07-18
      • 2012-02-19
      • 2010-11-15
      • 2013-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多