2011-11-01 178 views
0

我一直在努力解决以下问题。请帮助 我正在使用菜单控件并使用站点地图进行填充。Asp.net站点地图

我有一个网站地图提供商,它看起来像以下:

<?xml version="1.0" encoding="utf-8" ?> 
    <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" > 
     <siteMapNode url="" title="Home" description="" roles="*" > 
     <siteMapNode url="~/Default.aspx" title="PRA Profile" description=""roles="Partner" > 
      </siteMapNode > 

     <siteMapNode url="" title="PRA Profile1" description="" roles="Partner"> 

      <siteMapNode url="~/New.aspx?id=1" title="Partner View" description="Partner View"> </siteMapNode > 
     </siteMapNode > 
      <siteMapNode url="~/About.aspx" title="Estimator" description="~/Test.aspx" roles ="Admin" > 
     </siteMapNode > 
     <siteMapNode url="~/About.aspx?id=3" title ="Reports" description ="" roles="Admin"> 
      </siteMapNode> 
     </siteMapNode> 
    </siteMap> 

我已经加入了securityTrimmingEnabled =“真”在web.config

我的问题是,如果我在父输入一个URL节点然后角色属性不工作eles它工作正常。

如果在父节点给我的url然后角色属性fails.if我不给网址 并添加子节点,然后基于角色的显示/隐藏的菜单完美工作。 当管理员与其他屏幕一起登录时,我必须在“非管理员”登录时显示父节点,并将其显示为子节点。

请帮忙!

回答

0

角色属性是一个增强属性。换句话说,它增强了作为基于URL /角色的身份验证设置一部分的安全修整。安全修整基于web配置中的url安全设置(或其他基于URL /角色的身份验证机制)完成。

http://msdn.microsoft.com/en-us/library/ms178428.aspx

如果基于URL的身份验证机制是使用web.config文件来控制你的基于URL的认证,你就需要使用授权添加位置元素,你的web.config的网址,你”试图控制访问:

<location path="PageWithAuthorization.aspx"> 
    <system.web> 
     <authorization> 
     <deny users="?"/> 
     <allow roles="Allowed_Role"/> 
     <deny users="*"/> 
     </authorization> 
    </system.web> 
    </location> 

这是授权的基础来源。当上面列出的页面是站点地图的一部分并且securityTrimmingEnabled = true时,只有位于“Allowed_Role”中的用户才能看到站点地图链接。通过在站点地图角色属性中添加另一个角色,您允许其他角色也访问该页面。