技术开发 频道

.NET 2.0的会员、角色及配置问题的探讨

      四、 用角色属性阻止安全性修剪

    可能有一些时候-你想要显式地通知安全性修剪不要为一个特别的角色或一组角色修剪一个站点地图部分。例如,如果你的站点地图包含一个到外部资源的链接,那么该站点导航系统不可能针对这个远程资源确定授权规则。因此,它为所有的用户修剪该结点。也就是说,如果你启动了安全性修剪功能并且在用一外部链接(如<siteMapNode url="http://www.scottonwriting.net/sowBlog/" title="My Blog"/>)使用一个站点地图,那么,没有用户会在TreeView或Menu控件中看到这些。然而,你可能想要让该站点导航系统为那些具有Administrator和Tester角色的用户显示这一结点。(或不考虑任何用户的角色。)

    同样,即使他们没有被授权存取该资源,你也可能想向这些用户显示一个局部站点地图结点。例如,一访问该站点却还没有登录的用户肯定不会看到在TreeView中的Admin链接。然而,我们仍可能想显示之。点击它将会使用户被导航到~/Admin/Default.aspx页面,此时,系统将看到他们没有被认证。这将把他们引导到登录页面。在登录后,他们将被自动地引导回Admin页面。如果他们不是管理员角色,他们将被送回到登录页面,否则他们将被同意存取Admin部分。

    为了不修剪针对一个特定的站点地图结点的特别角色,可以使用在相应的<siteMapNode>元素中的角色属性。(注意:这一设置不会应用到descendent<siteMapNode>元素;也就是说,对那些显式地指定另外的应该看到该结点的角色,你必须显式地在每一个<siteMapNode>元素上设置这一属性)。此角色属性能包含一个角色名,一个用逗号间隔列表的角色名字,或一个星号(*)来表示所有的用户。包含在本文末尾的下载文件中的下列站点地图文件显示出怎样使用角色属性来使得所有的用户拥有一个外部的站点地图结点参考。(可以联想到,当启动安全性修剪功能时,如果在此忽略角色属性,这将导致不向任何用户显示这个站点地图结点。)> 
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" > <siteMapNode url="~/Default.aspx" title="Home"> <siteMapNode url="~/About.aspx" title="About" /> <siteMapNode url="~/Admin/Default.aspx" title="Admins" /> <siteMapNode url="~/Tester/Default.aspx" title="Tester" /> <siteMapNode url="~/AuthUsers/Default.aspx" title="Auth Users Only" /> <!-- For links to outside resources, need to explicitly define what roles should be shown this section --> <siteMapNode url="http://www.scottonwriting.net/sowBlog/" title="My Blog" roles="*" /> </siteMapNode> </siteMap>
    该角色属性还可以用于在安全性修剪功能性上增加一些性能改进。在启动了安全性修剪功能后,站点导航提供者为所有的定义在站点地图中的结点自动地检查授权规则。对于那些你想要向所有的用户显示的结点,通过添加roles="*",你可以绕过这一检查,如上例中所示。通过添加这个属性,你会短路正常的授权检查,从而改进安全性修剪性能。

    五、 结论

    除了提供站点导航支持外,ASP.NET 2.0还使得构建包括用户帐户支持和基于角色的授权的Web站点非常容易。随之而来的并不令人感到惊奇-这两个系统可以互操作并且提供一个站点地图-其返回内容是基于当前登录的用户和定义在站点地图中的URL的授权设置。配置站点导航以限制基于访问用户和授权设置的结果就象把一些代码添加Web.config文件一样地容易。

0
相关文章