如果你需要ASP membership and role model提供一些擴充功能,又或者你想要按照不同的使用者角色去顯示不同的網頁導覽,希望我這裡的介紹可以省下一點你的時間。
如果你需要ASP membership and role model提供一些擴充功能,又或者你想要按照不同的使用者角色去顯示不同的網頁導尸覽,希望我這裡的介紹可以省下一點你的時間。
首先,把使用者的會員和角色資料儲存到資料庫,讓你有擴充其功能的可能性,你可以實作自己的提供者類別。
這文章我會集中在怎樣網站架設的流程去支援這些功能。
開始我們先要在資料庫裡建立資料表,去儲存使用者的會員和角色資訊。
到 %WINDOWS%\Microsoft.NET\Framework\v2.0.50727\ 。
應該會找到一個 ASPNET_REGSQL.exe,用這個工具去產生你需要的資料表。
ASPNET_REGSQL -S database_host -U username -P password -d database_name -A support_providers
例子 : ASPNET_REGSQL -S 192.168.1.2 -U sa -P 1234 -d membershipDb -A All
然後,我們需要在web.config裡進行設定,讓程式知道我們要用會員和角色功能。還有告訴它提供者的資訊。
建立一個連接字串:
<connectionStrings> <remove name="LocalSqlServer"/> <add name="LocalSqlServer" connectionString="data source=.;Initial Catalog=MemRoleProvider;user id=sa;password=1234" providerName="System.Data.SqlClient" /> </connectionStrings>
那個remove會刪掉前面所有的連接字串,會這樣做是因為LocalSqlServer好像是預設的字串所用的名稱,不清掉的話會相衝。
當然你可以用一個不同的名稱,就不需要移除預設的字串。
最後,我們要在<system.web>區塊裡加入一個提供者。
<membership defaultProvider="AnaSystemSqlMembershipProvider" userIsOnlineTimeWindow="15"> <providers> <clear/> <add name="AnaSystemSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider,System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="LocalSqlServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" passwordAttemptWindow="10"/> </providers> </membership> <roleManager enabled="true" defaultProvider="AnaSystemSqlRoleProvider"> <providers> <add name="AnaSystemSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="LocalSqlServer" applicationName="/"/> </providers> </roleManager>
Clear會把已存在的提供者清掉。相關參數的設定可以參考這裡。
connectionStringName應該為上面你設定的連接字串名稱。你現在應該已經可以使用ASP的會員和角色功能。
下一步是要整合Security Trimming。我會用這個功能去根據使用者角色顯示不同的網頁導覽選單的內容。
首先你的網頁程式要有一個sitemap,然後這樣啟動security trimming功能。
在<system.web>區塊
<siteMap enabled="true" defaultProvider="XmlSiteMapProvider"> <providers> <clear/> <add name="XmlSiteMapProvider" description="Default SiteMap provider." type="System.Web.XmlSiteMapProvider" siteMapFile="Web.sitemap" securityTrimmingEnabled="true" /> </providers> </siteMap>
clear會移除任何存在的sitemap提供者。加入了我們的提供者後,再來就要啟動驗證功能
在<system.web>區塊
<authentication mode="Forms"> <forms name=".mycookie" path="/" loginUrl="Default.aspx" protection="All" timeout="90"/> </authentication>
name屬性是指該網頁程式cookie所用的獨特名稱。其他相關設定參考這裡。
接下來要設定各目錄的存取規則。ASP的存取規則是以目錄為單位的。
根目錄的存取規則會在專案的web.config裡。每個目錄又會有自己的web.config放存取規則。
下面是一個例子。在<system.web>區塊
<authorization> <allow users="admin" /> <deny users="?" /> </authorization>
這兩句的意思是。根本目可以被admin角色存取,但禁止暱名訪問。
你可以透過圖形介面去管理存取規則,在VS2008->專案->ASP.NET組態->安全性
最後一步,就是在sitemap檔案裡加入一些設定。
替siteMapNode加入roles="*",這個啟動security trimming的功能,程式會透過存取規則去切割sitemap。
下面是一個例子。
<?xml version="1.0" encoding="utf-8" ?> <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" > <siteMapNode title="Home" description="Home" url="~/default.aspx" > <siteMapNode title="Guest Area" roles="*"> <siteMapNode url="~/Guest/Guest.aspx" title="guest only" description="" /> </siteMapNode> <siteMapNode title="Power Area" roles="*"> <siteMapNode url="~/PowerUser/Content.aspx" title="power user" description="" /> </siteMapNode> </siteMapNode> </siteMap> 你可以更詳細的描述存取規則,達到以檔案為基礎的存取限制,但這超過本篇的討論範圍。你可以到這裡取得一點相關資訊。