当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 在ASP.NET 2.0中建立站点导航层次(3)

ASP.NET
Asp.net 时间操作基类(支持短日期,长日期,时间差)
asp.net 获取机器硬件信息(cpu频率、磁盘可用空间、内存容量等)
asp.net 数据库备份还原(sqlserver+access)
Asp.Net 数据操作类(附通用数据基类)
Asp.net 弹出对话框基类(输出alet警告框)
Asp.net 文件上传类(取得文件后缀名,保存文件,加入文字水印)
Asp.net Socket客户端(远程发送和接收数据)
Asp.net 字符串操作基类(安全,替换,分解等)
Asp.Net数据输出到EXCEL表格中
asp.net Gridview里添加汇总行
asp.net UpdatePanel的简单用法
asp.net ajaxControlToolkit FilteredTextBoxExtender的简单用法
this connector is disabled错误的解决方法
sql事务应用积累
asp.net Page.Controls对象(找到所有服务器控件)
在asp.NET中字符串替换的五种方法
ASP.NET缓存方法分析和实践示例代码
asp.net 在DNN模块开发中遇到的resx怪问题
ASP.NET State service状态服务的问题解决方法
asp.net 结合mysql存储过程进行分页代码

在ASP.NET 2.0中建立站点导航层次(3)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 224 ::
收藏到网摘: n/a

  站点导航的安全性

  站点导航特性可以根据授权规则过虑提供程序所返回的SiteMapNode实例。XmlSiteMapProvider可以根据当前网站使用的文件和URL授权规则过虑节点。

  下面的例子使用了窗体授权规则,预定义的用户凭证存储在web.config中。在global.asax中,根据用户名,用户的角色都被附加到当前的请求上。在web.config中,嵌套在元素之下的站点地图提供程序使用的元素的securityTrimmingEnabled属性被设置为真。同时,web.config文件的末尾定义了一组URL授权规则。当你运行示例并登陆之后,XmlSiteMapProvider会自动地依据用户所属的角色和web.config中定义的授权规则来对SiteMapNode执行授权检测。

  请使用下面三个帐户之一运行示例:

  · Userid: SectionOne Password: SectionOne

  · Userid: SectionTwo Password: SectionTwo

  · Userid: AllSections Password: AllSections

  在页面的右上角有一个"退出"链接,因此你可以用不同的帐号登陆和退出。请注意,根据你登陆所使用的帐号不同,导航UI显示的Treeview和Menu控件会自动地反映该用户所获得的访问权限。提供程序自动地过虑了返回的节点--实现这种功能不需要额外的代码。用"SectionOne"帐号登陆的时候,只在左边的Treeview控件中显示"SectionOne"链接和外部链接。用"SectionTwo"帐号登陆的时候,只在左边的Treeview控件中显示"SectionTwo"链接和外部链接。用"AllSections"帐号登陆的时候,Treeview控件中显示了所有的链接。web.config中的授权规则配置为给"SectionOne"和"SectionTwo"层次授予了部分访问权力。

  这个示例还演示了如何处理应用程序目录范围之外的URL安全性。在web.sitemap文件中,外部链接的节点使用了roles属性。语法roles="*"授予所有用户访问和查看导航控件中的节点的权力。语法roles="Adminstrators,Regular Users"只允许这些角色的用户检索和查看导航控件中的节点。由于在示例中global.asax文件把用户分成了这两种角色,所以你一直可以看到外部链接。

  开发者可以选择同时使用文件/URL授权规则和roles属性来控制用户对SiteMapNode实例的访问权。如果两者的设置信息都是正确的,站点导航提供程序就会根据文件/URL授权规则和roles属性中的角色来对当前用户进行认证。如果当前用户通过了任何一种授权检查,就可以访问节点。

  如果默认的安全性操作不适用于你的应用程序,开发者还可以从XmlSiteMapProvider衍生类,并用自定义的节点授权实现来重载IsAccessibleToUser方法。

  Web.config的内容

  以下是引用片段:
<system.web>  
<authentication mode="Forms">  
<forms name=".ASPXAUTH" loginUrl="Login.aspx" protection="All" timeout="30" path="/" requireSSL="false" slidingExpiration="true" defaultUrl="Home.aspx" cookieless="UseCookies" enableCrossAppRedirects="false">  
<credentials passwordFormat="Clear">  
<user name="SectionOne" password="SectionOne"/>  
<user name="SectionTwo" password="SectionTwo"/>  
<user name="AllSections" password="AllSections"/>  
</credentials>  
</forms>  
</authentication>  
<authorization>  
<deny users="?"/>  
</authorization>  
</system.web>  
<location path="SectionOne.aspx">  
<system.web>  
<authorization>  
<allow users="SectionOne" roles="Administrators" />  
<deny users="*"/>  
</authorization>  
</system.web>  
</location>  
<location path="SectionOne">  
<system.web>  
<authorization>  
<allow users="SectionOne" roles="Administrators"/>  
<deny users="*"/>  
</authorization>  
</system.web>  
</location>  
<location path="SectionTwo.aspx">  
<system.web>  
<authorization>  
<allow users="SectionTwo" roles="Administrators"/>  
<deny users="*"/>  
</authorization>  
</system.web>  
</location>  
<location path="SectionTwo">  
<system.web>  
<authorization>  
<allow users="SectionTwo" roles="Administrators"/>  
<deny users="*"/>  
</authorization>  
</system.web> 

  本地化站点地图数据

  存储在sitemap文件中的导航数据可能需要进行本地化(localize)。元素中的URL、Title和Description属性也可以本地化。此外,开发者放置在元素中的任何自定义属性也可以本地化。

  下面的示例包含了英语和法语的本地化文本。它的web.sitemap文件使用两种类型(隐式的和显式的)的本地化表达式来实现这种功能。Sitemap文件在根siteMap元素中使用了enableLocalization=true就表明它使用了本地化数据。

  站点地图文件的隐式表达式让开发者能够轻易地用查找键(lookup key)标记每个元素,而查找键是用于从资源文件检索资源的。在示例的web.sitemap中,除了第一个节点之外,所有的节点都有隐式的资源表达式。它的语法类似resourceKey="Autos"。当XmlSiteMapProvider根据web.sitemap文件中的信息检索SiteMapNode的时候,它根据SiteMapNode属性的名称、resourceKey和为提供程序配置的siteMapFile属性的值来检索字符串资源。使用示例中的"Autos"节点的时候,提供程序(provider)会根据当前的文化来查找以"web.sitemap"开头的资源文件。这意味着,对于一个发送法语头信息的浏览器来说,提供程序会查找名称为web.sitemap.fr.resx的资源文件。在这个资源文件中,提供程序会依据resourceKey + "." + [SiteMapNode属性名]来查找资源键。例如,把"Autos"节点的Title属性当作例子,提供程序会在web.sitemap.fr.resx资源文件中查找键为Autos.Title的资源。