我有一个oracle数据库,用于存储本地Intranet的菜单和用户数据。
数据包括哪些使用者可以访问哪些页面。
最初我创建了一个扩展StaticSiteMapProvider类的类,但是当它进入测试环境时,我发现这是为整个站点缓存的(而不是基于用户)。在各种论坛上在线阅读后,有人建议我应该继承SiteMapProvider,因为这样可以让我在用户的基础上拥有一个SiteMapProvider和ASP:MENU项目的分离实例,但是这仍然没有解决问题
目前我有一个用户控件,它控制了asp:menu,并使用我的自定义站点地图提供程序作为其数据源。
有人可以建议我如何在数据库授权的驱动下以用户为基础显示菜单吗?
此外,整个菜单仍应显示给所有用户,只有在您点击菜单节点后才会知道他们是否有权访问该页面/节点。
由于
答案 0 :(得分:0)
您可以使用SiteMap上的角色来定义将出现的菜单。
答案 1 :(得分:0)
这里有两件事。如果你有静态的节点集合,然后你想根据用户的可访问性显示/隐藏它们,那么你应该覆盖IsAccessibleToUser 判断给定节点是否适用于当前用户的方法(可从给定的HttpContext访问)。
如果您的节点集合/层次结构按用户更改,请尝试覆盖BuildSiteMap以为当前用户加载不同的节点。但是,在这种情况下,如果StaticSiteMapProvider是正确的基类,我有点怀疑。您可能需要覆盖SiteMapProvider
。