根据用户角色在运行时创建菜单

时间:2011-12-27 15:49:09

标签: c# asp.net linq menu

我正在尝试根据用户角色创建一个不同的菜单。

例如,如果用户是Admin角色,则显示的菜单为:

  
      
  • AdminPane

  •   
  • RegisterUser

  •   
  • 的UserRole

  •   

如果用户是基本角色:

  
      
  • ViewProducts

  •   
  • makeOrder

  •   

这是一个布局示例。

我很感激一些帮助,因为我一直在网上搜索2个小时而没有运气。

感谢。

2 个答案:

答案 0 :(得分:4)

你想要做的是在你的web.config中有system.web部分的一个部分,如下所示:

    <siteMap>
        <providers>
            <add name="anonymous" type="System.Web.XmlSiteMapProvider" siteMapFile="~/YourAnonymouse.sitemap"/>
            <add name="user" type="System.Web.XmlSiteMapProvider" siteMapFile="~/YourNormalUser.sitemap"/>
            <add name="admin" type="System.Web.XmlSiteMapProvider" siteMapFile="~/YourAdmin.sitemap"/>
        </providers>
    </siteMap>

然后使用此功能,您将定义三个站点地图提供程序,每个站点地址提供程序指向各自的sitemap文件,以查找您为每种用户类型查找的必要菜单。

然后您将拥有一个菜单服务器控件将使用的SiteMapDataSource。这很可能存在于您的母版页上。在您的母版页Page_Load()上,您将拥有动态和编程方式设置SiteMapDataSource控件的站点地图数据源的逻辑:

    if (HttpContext.Current.User.Identity.IsAuthenticated)
    {
        if (HttpContext.Current.User.IsInRole("Admin"))
            SiteMapDataSource1.Provider = SiteMap.Providers("admin");
        else
            SiteMapDataSource1.Provider = SiteMap.Providers("user");
    }
    else
        SiteMapDataSource1.Provider = SiteMap.Providers("anonymous");

答案 1 :(得分:0)

所有这一切都可以通过使用MasterPages来完成,在Postback或初始页面加载时,你可以创建一个存储值的会话变量或者对ActiveDirectory写一些东西相当简单。