具有权限的ASP菜单

时间:2013-12-17 19:34:41

标签: c# asp.net

这是导航菜单的样子。完成HTML,CSS并放在母版页中。

现在的想法是根据用户权限显示/隐藏项目和子项目。

例如:用户仅拥有sub2-2和sub3-1等的权限。因此他登录时不应该看到菜单中的其他项目。 完成必要的表和指定角色。不知怎的,我需要将它们应用到菜单中。是否可能。(使用ASP.Net,C#)

ITEM1    ITEM2    ITEM3      
          SUB2-1    SUB3-1    
          SUB2-2    SUB3-2

查看asp:Menu控件,但似乎没有li项的'visible'属性。 基本上我正在寻找像对象/控件/方法,...我可以循环,检查每个项目,使其可见或隐藏。请提出最佳方法。

2 个答案:

答案 0 :(得分:3)

内置菜单支持用户角色,并根据角色显示/隐藏菜单项。

如果您需要更细粒度的控制,您可以拥有自己的动态站点地图提供程序,它可以执行您想要的任何操作 - 根据任何内容,角色,用户名,位置等显示/隐藏项目。

我在几年前写过博客。

http://www.wiktorzychla.com/2008/04/sitemapresolve-and-dynamic-site-map.html

答案 1 :(得分:1)

在这里查看我的代码......

<asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false" IncludeStyleBlock="false" Orientation="Horizontal">
                    <Items>
                        <asp:MenuItem NavigateUrl="~/Default.aspx" Text="Change My Password"/>
                        <asp:MenuItem NavigateUrl="~/ResetPassword.aspx" Text="Reset My Password"/>
                        <asp:MenuItem Value="AdminOnly" NavigateUrl="~/UpcomingExpirations.aspx" Text="Upcoming Expirations"/>
                    </Items>
                </asp:Menu>

在背后的代码中......

protected void Page_Load(object sender, EventArgs e)
        {
        if (!IsUserAnAdmin(HttpContext.Current.User.Identity.Name))
            {
            MenuItem removeitem = NavigationMenu.GetMenuItemByValue("AdminOnly");
            NavigationMenu.Items.Remove(removeitem);
            }
        }

不是将其设置为Visible = false,我只是删除它,如果他们不是管理员。

编辑... 刚刚意识到Menu.GetMenuItemByValue()是我写的扩展方法,所以你没有它!这里是。这非常有用。

/// <summary>
/// Returns the MenuItem in this Menu that has the specified Value (case sensitive)
/// </summary>
/// <param name="menu"></param>
/// <param name="ItemValue"></param>
/// <returns></returns>
public static System.Web.UI.WebControls.MenuItem GetMenuItemByValue(this System.Web.UI.WebControls.Menu menu, string ItemValue)
    {
    foreach (System.Web.UI.WebControls.MenuItem item in menu.Items)
        {
        if (item.Value == ItemValue)
            {
            return item;
            }
        }
    return null;
    }