Добавляйте элементы в меню динамически на сайте asp.net - PullRequest
7 голосов
/ 16 сентября 2011
<asp:Menu ID="mnu" runat="server" PathSeparator="," CssClass="menu" DynamicMenuItemStyle-CssClass="menu">
    <Items>
        <asp:MenuItem Text="home" NavigateUrl="~/Default.aspx"  />
        <asp:MenuItem Text="Aboutus" NavigateUrl="#"/>
        <asp:MenuItem Text="Support" NavigateUrl="#" />


    </Items>
</asp:Menu>

У меня есть это меню на главной странице , когда пользователь входит на веб-сайт, основываясь на роли пользователя, я хочу добавить элементы в меню со стороны сервера.Как я могу это сделать.

Администратор (меню для добавления -> Организация, Сообщение, Группа) Пользователи (меню для добавления -> Сообщение, Группа)

Поскольку у меня 6 ролей, яесть разные пункты меню для каждой роли.Как это можно сделать

Ответы [ 4 ]

7 голосов
/ 16 сентября 2011

В Page_Load мастера вы можете проверить, играет ли пользователь какие-то роли и динамически добавлять значения в меню:

protected void Page_Load(object sender, EventArgs e)
{
    if (User.IsInRole("admin"))
    {
        mnu.Items.Add(new MenuItem
        {
            Text = "Administer web site",
            NavigateUrl = "~/admin.aspx"
        });
    }
}
3 голосов
/ 28 мая 2012

Я бы обычно использовал карту сайта и настройки безопасности. Каждый siteMapNode имеет атрибут «role», который указывает, каким ролям разрешено видеть ссылку в меню. * используется для всех ролей или вы можете ввести список ролей через запятую. например,

<?xml version="1.0" encoding="utf-8" ?>
<siteMap>
  <siteMapNode title="Home" description="Home" 
       url="~/default.aspx" roles="*" >
  </siteMapNode>
  <siteMapNode title="Organization" description="Organization" 
       url="~/Organization.aspx" roles="Admin" >
  </siteMapNode>
  <siteMapNode title="Message" description="Message" 
       url="~/Organization.aspx" roles="Admin, User" >
  </siteMapNode>
</siteMap>

и т.д.

Затем вы можете включить безопасность безопасности в вашем файле web.config:

<siteMap defaultProvider="XmlSiteMapProvider" enabled="true">
  <providers>
    <add name="XmlSiteMapProvider"
         description="Default Site Map Provider"
         type="System.Web.XmlSiteMapProvider"
         siteMapFile="Web.sitemap"
         securityTrimmingEnabled="true" />
  </providers>
</siteMap>

Все, что вам нужно сделать, это установить источник данных вашего меню asp на карту сайта. Более подробную информацию можно найти здесь: http://msdn.microsoft.com/en-us/library/305w735z.aspx и здесь: http://msdn.microsoft.com/en-us/library/ms178429(v=vs.80).aspx

Мне нравится этот подход, потому что добавить новый элемент меню на основе ролей намного проще. Вам не нужно вручную проверять роль в коде, которая в конечном итоге, вероятно, окажется громоздкой инструкцией if.

0 голосов
/ 23 ноября 2015

Динамическое меню на основе привилегий пользователя

 C# CLASS FILES
        public class url_details
        {
            public string url;
            public string page_name;
            public string icon;
        }

        C# inside login page            
        List<url_details> url_list = new List<url_details>();            
        foreach (DataRow dr in dataTable.Rows)
        {
            url_details url_item = new url_details();
            url_item.url = dr["url"].ToString();
            url_item.page_name = dr["page_name"].ToString();
            url_item.icon = dr["icon"].ToString();
            url_list.Add(url_item);
        }           
        Session["urls"] = url_list;


        C#-HTML MENU FORM
         <%
            var uruls = (List<url_details>)Session["urls"];
            foreach (var url in uruls)
            {%>
                <li><a href="..<%=url.url %>"><%=url.icon %><span><%=url.page_name %></span></a></li>

            <% }                

        %>
0 голосов
/ 16 сентября 2011

Вы можете создать сеанс при входе пользователя в систему.

Session["user"] = user;

На главной странице;

var user = Session["user"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...