我一直在努力解决以下问题。请帮忙 我正在使用菜单控件并使用站点地图填充它。
我有一个站点地图提供程序,如下所示:
<?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>
我在web.config
中添加了securityTrimmingEnabled =“true”我的问题是,如果我在父节点中输入一个URL,那么roles属性不起作用,它可以正常工作。
如果在父节点中我给出了url,那么roles属性就失败了。如果我不给网址 并添加子节点然后基于角色的显示/隐藏菜单工作完美。 我必须在“非管理员”登录时仅显示父节点,并在管理员与其他屏幕一起登录时显示与子节点相同的屏幕。
请帮忙!
答案 0 :(得分:0)
“角色”属性是增强属性。换句话说,它增强了安全修整功能,这是基于URL /角色的身份验证设置的一部分。安全修整基于Web配置中的URL安全设置(或其他基于URL /角色的身份验证机制)完成。
请参阅http://msdn.microsoft.com/en-us/library/ms178428.aspx
如果您的基于网址的身份验证机制使用web.config来控制基于网址的身份验证,则需要向您的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”中的用户才会看到站点地图链接。通过在站点地图角色属性中添加其他角色,您可以允许其他角色也可以访问该页面。