Различные пункты меню для разных ролей
У меня есть пользовательская страница входа, где я аутентифицирую пользователей из БД. В ответ я получаю, если пользователь аутентифицирован, а также, если роль пользователя.например, пользователь принадлежит роли X, роли Y или роли Z
Я хотел показать разные пункты меню в зависимости от роли пользователя. Помогает ли файл sitemap в этой ситуации. Так как у него есть атрибут Role, но как мне передать информацию на следующую страницу о том, что пользователь принадлежит этой роли. Я строю карту сайта, как это....
<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>
1 ответ
Вы можете добавить к каждому пользователю в таблице базы данных список разрешенных 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 = "";
}
}
}
}