我正在开展一个项目,将大型网站拆分为更小,更具体的网站。我需要能够将对这些站点的访问限制为仅具有必要权限的用户,并且希望尽可能使用现有的成员资格/角色数据模型。
理想情况下,我希望将潜在的多个应用程序(在aspnet_applications表中定义)和特定于应用程序的角色(aspnet_roles)分配给单个用户。但是,aspnet成员资格模型似乎不允许这样做,因为aspnet_users和aspnet_membership记录包含特定的applicationID。
如何将单个用户分配给多个应用程序/角色?
答案 0 :(得分:2)
我已经使用了我的sql成员资格提供程序,我认为它在设计方面与sql提供程序没有什么不同。
为了将同一个用户与不同的角色联系起来,应该有一个名为 asp_net_usersinroles 的表格。在该表中,您可以插入具有不同roleID的相同userID,以便允许用户拥有多个角色。
同样,您需要创建UI以允许管理员用户分配不同的角色。在我的例子中,我使用ListBox来显示应用程序中的现有角色,这允许多重选择。
希望这有帮助。
答案 1 :(得分:2)
如果您不希望将数据链接到一个应用程序,那么除了标准的SqlMembership提供程序之外,您还可以考虑使用自定义management/role提供程序。
它具有更大的数据源使用灵活性,例如,您可以在数据库中使用自己的表来存储成员/角色信息,并在多个应用程序中使用这些表等。
您甚至可以更进一步,例如,您可以实现自定义成员资格和角色提供程序,并创建单独的模块(程序集),然后在多个应用程序中重用该模块。
答案 2 :(得分: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.");
}
}