我有一个自定义登录页面,我从数据库验证用户。作为回报,我得到用户是否经过身份验证以及用户的角色。 例如,用户属于角色X,角色Y或角色Z
我想根据用户的角色显示不同的菜单项。 站点地图文件在这种情况下是否有帮助。因为它确实具有角色属性 但是我应该如何将信息传递给用户属于此角色的下一页。我正在构建像这样的站点地图....
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0">
<siteMapNode url="" title="Top" description="" roles="*">
<siteMapNode url="GeneralUser.aspx" title="General User" description="" roles="GeneralUser" />
<siteMapNode url="PowerUser.aspx" title="Power User" description="" roles="X" />
</siteMapNode>
</siteMap>
答案 0 :(得分:0)
您可以向数据库表中的每个用户添加一个允许的URL和主菜单项列表,他们可以查看并允许访问这些项目,当您获得每个用户的角色,然后将其保存在会话变量中,然后显示和隐藏site1.master中的项目,如下所示:
//--------- Hiding Menu Items ------------------------
for (int i = Menu1.Items.Count-1; i >=0 ; i--)
{
if (Session["AllowedMenus"].ToString().ToUpper().IndexOf(Menu1.Items[i].Text.ToUpper().ToString()) < 0)
{
//---- Hiding Main Menu
Menu1.Items[i].Text = "";
Menu1.Items[i].Enabled = false;
}
else
{
for (int j = Menu1.Items[i].ChildItems.Count - 1; j >= 0; j--)
{
url=Menu1.Items[i].ChildItems[j].NavigateUrl.ToUpper().ToString();
//---- Hiding Submenus
if (Session["AllowedURLs"].ToString().ToUpper().IndexOf(Menu1.Items[i].ChildItems[j].NavigateUrl.ToUpper().ToString()) < 0)
{
Menu1.Items[i].ChildItems[j].Text = "";
}
}
}
}