<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>
我在母版页中有这个菜单,当用户登录网站时,根据用户角色我想从服务器端向菜单添加项目。我怎么能这样做。
管理员(要添加的菜单 - &gt;组织,消息,组) 用户(要添加的菜单 - &gt;消息,组)
由于我有6个角色,因此每个角色都有不同的菜单项。怎么做呢
答案 0 :(得分: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"
});
}
}
答案 1 :(得分:3)
我通常使用站点地图和安全修整。每个siteMapNode都有一个“roles”属性,指示允许哪些角色在菜单中查看链接。 *用于所有角色,或者您可以输入以逗号分隔的角色列表。 e.g。
<?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语句。
答案 2 :(得分:0)
您可以在用户登录时创建会话。
Session["user"] = user;
在母版页中;
var user = Session["user"];
答案 3 :(得分: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>
<% }
%>