Различные пункты меню для разных ролей

У меня есть пользовательская страница входа, где я аутентифицирую пользователей из БД. В ответ я получаю, если пользователь аутентифицирован, а также, если роль пользователя.например, пользователь принадлежит роли 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 = "";

                            }
                        }
                    }
                } 
Другие вопросы по тегам