張 佳
(黃山學(xué)院 現(xiàn)代教育技術(shù)中心,安徽 黃山 245041)
新聞發(fā)布類(lèi)網(wǎng)站一般都設(shè)有新聞的分類(lèi),每條新聞發(fā)布或編輯時(shí),都會(huì)歸屬某個(gè)分類(lèi)。使用asp.net設(shè)計(jì)該類(lèi)網(wǎng)站時(shí),新聞發(fā)布/編輯頁(yè)(.aspx)存放于解決方案資源管理器的文件夾中,用戶(hù)是否能對(duì)該頁(yè)面進(jìn)行操作取決于用戶(hù)所擁有的角色是否對(duì)該文件夾有訪(fǎng)問(wèn)權(quán)限。一旦角色有訪(fǎng)問(wèn)某文件夾的權(quán)限,那么該用戶(hù)便擁有了訪(fǎng)問(wèn)該文件夾中頁(yè)面的所有操作權(quán)限,能對(duì)新聞的發(fā)布和編輯選擇所有的欄目,無(wú)疑權(quán)限過(guò)大。一般某個(gè)用戶(hù)只能操作一個(gè)或幾個(gè)欄目,而不是對(duì)所有的欄目都有操作權(quán)限。
用ASP.NET開(kāi)發(fā)一個(gè)新聞發(fā)布類(lèi)網(wǎng)站,設(shè)計(jì)數(shù)據(jù)表如圖1[1]。
圖1 欄目表與新聞表之間一對(duì)多的關(guān)系
欄目表的記錄如表1。
表1 欄目表的具體記錄
欄目表與新聞表是一對(duì)多的關(guān)系,一個(gè)欄目有一條或多條新聞;一條新聞只屬于一個(gè)欄目。
在解決方案資源管理器中建立文件夾newsEdit,在該文件夾中建立Web窗體newsIn.aspx。如圖2。
圖2 新聞編輯文件夾和aspx頁(yè)面
該頁(yè)能加入或編輯具體的新聞,加入或編輯的新聞能選擇所有的欄目。
對(duì)該網(wǎng)站啟用并建立角色newsRo,設(shè)置該角色擁有對(duì)newsEdit文件夾的操作權(quán)限,具體設(shè)置如圖3(news是網(wǎng)站存放文件夾,一般位于磁盤(pán)根目錄下)。
圖3 建立角色并對(duì)文件夾設(shè)置訪(fǎng)問(wèn)權(quán)限
建立用戶(hù)userEdit如圖4,并使該用戶(hù)具有newsRo角色。
圖4 設(shè)置用戶(hù)的角色
這樣,用戶(hù)userEdit具有newsRo角色,而newsRo角色具有操作文件夾newsEdit及其頁(yè)面newsIn.aspx的操作權(quán)限。于是用戶(hù)userEdit能操作newsIn.aspx頁(yè),該用戶(hù)加入或編輯的新聞能選擇所有的欄目名,如圖5。
圖5 未細(xì)化用戶(hù)對(duì)新聞欄目操作權(quán)限的邏輯圖
在newsIn.aspx頁(yè)面中加入或編輯新聞時(shí),用戶(hù)userEdit能操作所有欄目,導(dǎo)致操作權(quán)限過(guò)大,這在新聞?lì)惥W(wǎng)頁(yè)中是不合理的。合理的做法是,某個(gè)用戶(hù)只能操作指定的一個(gè)或多個(gè)欄目,而不是操作所有的欄目。
建立若干個(gè)“用戶(hù)組”,存放于“用戶(hù)組”表中。一個(gè)用戶(hù)組包含一個(gè)或多個(gè)欄目,一個(gè)欄目可以屬于一個(gè)或多個(gè)用戶(hù)組。所有用戶(hù)組包含的欄目應(yīng)包括該新聞網(wǎng)站所有欄目。然后將用戶(hù)分配給用戶(hù)組:一個(gè)用戶(hù)只屬于一個(gè)用戶(hù)組,一個(gè)用戶(hù)組可以有一個(gè)或多個(gè)用戶(hù)。于是,用戶(hù)便擁有它所在用戶(hù)組所具有欄目的操作權(quán)限,而對(duì)該用戶(hù)組不包含的欄目無(wú)權(quán)操作。這樣便解決了用戶(hù)對(duì)頁(yè)面操作權(quán)限過(guò)大的問(wèn)題,邏輯關(guān)系如圖6。
圖6 細(xì)化用戶(hù)對(duì)新聞欄目操作權(quán)限的邏輯圖
由上述可知,“用戶(hù)組”與“欄目”之間是多對(duì)多的關(guān)系,在關(guān)系型數(shù)據(jù)庫(kù)設(shè)計(jì)中,需要將它們分解為兩個(gè)一對(duì)多的關(guān)系??山⒁粋€(gè)“欄目組”表,欄目表與欄目組表之間是一對(duì)多的關(guān)系;同樣,用戶(hù)組表與欄目組表之間也是一對(duì)多的關(guān)系。
綜上所述,該新聞發(fā)布網(wǎng)站數(shù)據(jù)表之間有如圖7所示關(guān)系。
圖7 新聞?lì)惥W(wǎng)站各表之間的關(guān)系
其中,aspnet_Users表是在建立角色和用戶(hù)的時(shí)候系統(tǒng)自動(dòng)建立的。
該存儲(chǔ)過(guò)程(按用戶(hù)名選擇欄目)用在當(dāng)用戶(hù)加入或編輯新聞時(shí),用戶(hù)只能選擇該用戶(hù)所在用戶(hù)組中所包含的欄目。
權(quán)限設(shè)置界面如圖8。
圖8 用戶(hù)權(quán)限細(xì)化操作界面
首先,后臺(tái)管理員選擇某個(gè)用戶(hù)組后,界面刷新并顯示所選擇的用戶(hù)組當(dāng)前擁有的欄目名(程序運(yùn)行最開(kāi)始可能沒(méi)有任何欄目);然后勾選或取消勾選具體的欄目名,即給所選的用戶(hù)組分配具體的欄目名;最后單擊“將欄目操作權(quán)分配給用戶(hù)組”按鈕,即將選中的欄目名分配給了所選擇的用戶(hù)組。
同樣,將用戶(hù)分配給用戶(hù)組也是先選擇具體的用戶(hù)組名,再分配具體的用戶(hù)名,最后單擊“將用戶(hù)加入到用戶(hù)組中”按鈕即可。
通過(guò)建立用戶(hù)組,細(xì)化了用戶(hù)的操作權(quán)限,這也是新聞?lì)惥W(wǎng)站應(yīng)有的合理的設(shè)計(jì)。但一個(gè)用戶(hù)不能歸于多個(gè)用戶(hù)組中,否則就違背了設(shè)計(jì)的初衷;若想讓用戶(hù)擁有兩個(gè)及以上用戶(hù)組中欄目的操作權(quán),可再建立一個(gè)用戶(hù)組,將需要的欄目劃入該用戶(hù)組中,再將用戶(hù)歸為該用戶(hù)組即可。此外,若一個(gè)欄目只歸屬于一個(gè)用戶(hù)組,則該欄目只能由該組中的用戶(hù)操作;若一個(gè)欄目歸屬于兩個(gè)及以上用戶(hù)組,則該欄目下的新聞可由不同用戶(hù)組中的用戶(hù)操作。這樣一方面限制了用戶(hù)的權(quán)限,又不失操作的靈活性。
[1]蘇嘯,廖德偉.網(wǎng)站設(shè)計(jì)與制作[M].北京:中國(guó)鐵道出版社,2011.