3

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

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

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

4

3 回答 3

2

我使用了我的 sql 会员提供程序,我认为它与 sql 提供程序在设计方面并没有太大的不同。

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

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

希望这可以帮助。

于 2012-01-05T09:27:27.397 回答
2

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

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

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

于 2012-01-05T09:35:27.417 回答
0

您可以在代码中设置成员资格检查的 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.");
    }
}
于 2012-06-01T19:02:33.150 回答