2011-09-16 70 views
7
<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> 

我在母版頁,這個菜單當用戶登錄到網站,基於用戶角色我想從項目服務器添加到菜單側。我怎樣才能做到這一點。項目添加到動態菜單在asp.net網站

管理員(菜單添加 - >組織,信息,集團) 用戶(菜單添加 - >消息,集團)

既然我有6個角色,我對每個角色不同的菜單項。如何才能做到這一點

回答

7

在主的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" 
     }); 
    } 
} 
+0

這一點,你就不會起火事件的代碼menuitemclick背後 – Bachask8

0

您可以創建一個會話,當用戶登錄。

Session["user"] = user; 

In Master Page;

var user = Session["user"]; 
3

我通常會使用網站地圖和安全修整。每個siteMapNode都有一個「roles」屬性,用於指示哪些角色可以在菜單中看到鏈接。 *用於所有角色,或者您可以輸入以逗號分隔的角色列表。例如

<?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

動態用戶權限菜單

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> 

      <% }     

     %>