top
Loading...
ASP.NET2.0站點登錄、導航與權限管理
友情推薦:ASP.NET初學者入門最佳實踐

(一)登錄

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:WindowsMicrosoft.NetFrameworkv2.0.50215aspnet_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="*"表示所有人都可以看到下面的頁面,但是我們在規則中可以拒絕某些 角色的用戶看到下面的相關頁面(通過目錄權限控制)。

作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com