轉載自:http://dev.yesky.com/msdn/440/2384940.shtml
(一)登入
asp.net 2.0中,新增了許多新的功能和控制項。其中,新增的登陸控制項可謂使得WEB應用的設計更加得心應手。什麼是登陸控制項呢?就是我們平常在WEB應用中經常要用到的使用者註冊,登陸,忘記密碼,登陸後根據許可權的不同而顯示不同的頁面等功能,現在在asp.net 2.0中都已經可以由提供的控制項來實現了。
asp.net 2.0中,為了更方便建立和系統管理使用者,以及對 Web 應用程式中的頁進行密碼保護,引進了新的架構membership。新的架構套件含用於處理身分識別驗證和授權的新增功能,能夠同時滿足 Web 網站管理員和開發人員的需要。Web 網站管理員可以利用新的 Web 網站管理工具來建立新的使用者和角色,以及控制對 Web 應用程式中頁面的訪問。Web 網站管理工具是一組預先編寫的 ASP.NET頁,不具備編程技巧的使用者可以使用它們來配置 Web 應用程式。利用membership API,編程人員可以很方便地使用拖拉控制項的方法,再加以少量的代碼,就可以完全實現對使用者,角色許可權等的管理,還可以自訂做擴充。
1.建立網站項目
2.ASP.NET配置
安全設定選項被分為三部分:使用者,角色和規則。
登入的身分識別驗證可以配置為基於Forms和Windows的。
3.使用登入控制項
說明:使用者登入後,顯示“退出”的提示,通過LoginStatus控制項來實現。在控制項的屬性中,有LogoutAction和LogoutPageUrl兩個屬性,可以來設定登出時是僅僅重新整理當前頁面、轉向到某個頁面或者轉向到登入頁面。
如何設定LoginPageUrl(登入的頁面),運行程式時,當按這個控制項的顯示的Login連結時,總是轉到根資料夾下的Login.aspx,而實際的登入檔案在/Login/Login.aspx 。如何解決?
查了下資料,原來登入的Url是在web.config中設定的。如果是用Form驗證登入,預設的web.config是這樣寫的:
<system.web>
<authentication mode="Forms" />
</system.web>
需要修改成如下的樣子:
<system.web>
<authentication mode="Forms">
<forms loginUrl="~/member/login.aspx"></forms>
</authentication>
</system.web>
二)網站導覽
1.三種導航控制項
Menu:使用一菜單顯示網站的結構。
TreeView:用一個可展開的樹顯示網站的結構
SiteMapPath:用於顯示終端使用者處於相對於網站結構的具體位置
2.Web.sitemap 導航XML檔案
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode title="首頁" url="SiteMapTest.aspx" >
<siteMapNode title="產品" roles="*">
<siteMapNode title="Windows" url="SiteMapTest.aspx?id=windows" />
<siteMapNode title="Office" url="SiteMapTest.aspx?id=office" />
<siteMapNode title="Mobile Devices" url="SiteMapTest.aspx?id=mobile" />
<siteMapNode title="Business Solutions" url="SiteMapTest.aspx?id=business" />
<siteMapNode title="Servers" url="SiteMapTest.aspx?id=servers" />
<siteMapNode title="Developer Tools" url="SiteMapTest.aspx?id=tools" />
<siteMapNode title="Games and XBox" url="SiteMapTest.aspx?id=games" />
<siteMapNode title="All Products" url="SiteMapTest.aspx?id=all" />
</siteMapNode>
<siteMapNode title="資源" roles="*">
<siteMapNode title="支援" roles="*">
<siteMapNode title="修改密碼" url="~/Login/ChangePassword.aspx" />
<siteMapNode title="Knowledge Base" url="SiteMapTest.aspx?id=knowledge" />
</siteMapNode>
<siteMapNode title="Downloads" url="SiteMapTest.aspx?id=downloads" />
<siteMapNode title="Windows Update" url="SiteMapTest.aspx?id=windowsupdate" />
<siteMapNode title="Office Update" url="SiteMapTest.aspx?id=officeupdate" />
<siteMapNode title="Learning Tools">
<siteMapNode title="Training & Certification" url="SiteMapTest.aspx?id=training" />
<siteMapNode title="Books" url="SiteMapTest.aspx?id=books" />
<siteMapNode title="Events & Webcasts" url="SiteMapTest.aspx?id=events" />
<siteMapNode title="Patterns & Practices" url="SiteMapTest.aspx?id=patterns" />
</siteMapNode>
<siteMapNode title="Community" url="SiteMapTest.aspx?id=community" />
<siteMapNode title="Security" url="SiteMapTest.aspx?id=security" />
</siteMapNode>
<siteMapNode title="RSS" roles="*">
<siteMapNode title="公司關係" url="SiteMapTest.aspx?id=relations" />
<siteMapNode title="RSSSite" url="~/RSS/RSSSite.aspx" />
<siteMapNode title="Careers" url="SiteMapTest.aspx?id=careers" />
<siteMapNode title="About this Site" url="SiteMapTest.aspx?id=about" />
</siteMapNode>
</siteMapNode>
</siteMap>
Web.sitemap檔案必須包含根結點sitemap。一張網站地圖由一系列相聯絡的SiteMapNode對象組成。這些SiteMapNode以一種層次方式聯絡在一起。該層次包含單個根結點-它是該層中唯一的一個沒有父結點的結點,代表首頁。在該父sitemapnode結點下,可以有若干個子sitemapnode結點,分別按階層代表了網站的各子欄目(留意一下上例中,各個子結點之間的內含項目關聯性)。
3. 資料來源SiteMapDataSource控制項
SiteMapDataSource會自動尋找項目中名為Web.sitemap的 一個XML檔案
(三)許可權管理
網站在安全性方面有一個常見的要求:特定的頁面僅允許某些成員或其他經過身分識別驗證的使用者瀏覽。ASP.NET 的角色管理提供了一種方法,可以基於資訊安全角色限制對 Web 檔案的訪問。網站地圖安全性調整提供了一種同樣基於資訊安全角色的方法來隱藏網站地圖中的導航連結。
1. ASP.NET 網站配置
1)提供者
可使用 SQL SERVER 2005(預設),2000和Access資料庫儲存使用者資訊。
若要使用 SQL SERVER 2000資料庫儲存資訊:
a.用SQL Server的企業管理器,建立一個資料庫,如為zyh;
b.用aspnet_regsql(C:\Windows\Microsoft.Net\Framework\v2.0.50215\aspnet_regsql.exe)建立資料庫。除在建立嚮導的第3步資料庫下拉框選擇“zyh”以外,其餘各步驟皆使用預設設定。這樣,在Sql Server 2000中會建立一個含有使用者表和存貯過程的完整資料庫。
c.在管理工具中開啟IIS,找到虛擬目錄newtest,用滑鼠右鍵點擊,然後左鍵點功能表項目【屬性】、【ASP.NET】標籤、【編輯配置】按鈕,在【常規】標籤的【連接字串管理器】中,點名稱【LocalSqlServer】,點【編輯】按鈕,把【串連參數】修改為相應能夠串連到資料庫zyh的資料庫連接字串,如“Data Source=.;Initial Catalog=zyh;Persist Security Info=True;User ID=sa;Password=12345”,此後,一直點【確定】按鈕,最後到IIS管理工具介面即可。
d.最後返回網站管理工具Web頁面,點擊安全主題,就會出現“使用安全設定嚮導按部就班地配置安全性。”連結和其它相關連結。
2)安全設定選項被分為三部分:使用者,角色和規則。
其中規則建立了角色對項目中檔案夾的存取權限。
3)應用程式配置
可設定SMTP伺服器 以供使用者通過email找回密碼。
2. 建立登入頁面
3.在Web.config檔案中啟用角色管理
<system.web>
<siteMap defaultProvider="XmlSiteMapProvider" enabled="true">
<providers>
<add name="XmlSiteMapProvider"
description="Default SiteMap provider."
type="System.Web.XmlSiteMapProvider "
siteMapFile="Web.sitemap"
securityTrimmingEnabled="true" />
</providers>
</siteMap>
<roleManager enabled="true" />
<authentication mode="Forms">
<forms loginUrl="~/Login/login.aspx"></forms>
</authentication>
<compilation debug="true">
<assemblies>
<add assembly="System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
</assemblies>
</compilation>
</system.web>
<system.net>
<mailSettings>
<smtp from="wangyihust@163.com">
<network host="smtp.163.com" password="passwordModify" userName="wangyihust" />
</smtp>
</mailSettings>
</system.net>
4.在Web.sitemap 檔案中 加入角色許可權,以顯示或隱藏相關頁面
<siteMapNode title="RSS" roles="*">
<siteMapNode title="公司關係" url="SiteMapTest.aspx?id=relations" />
<siteMapNode title="RSSSite" url="~/RSS/RSSSite.aspx" />
<siteMapNode title="Careers" url="SiteMapTest.aspx?id=careers" />
<siteMapNode title="About this Site" url="SiteMapTest.aspx?id=about" />
</siteMapNode>
其中,roles="*"表示所有人都可以看到下面的頁面,但是我們在規則中可以拒絕某些 角色的使用者看到下面的相關頁面(通過目錄許可權控制)。