?? 實現業務系統中的用戶權限管理--設計篇.htm
字號:
<LI>
<DIV
align=left><STRONG>權限映射表</STRONG>中僅僅記錄著一個管理組可以執行的權限。</DIV>
<LI>
<DIV
align=left>一旦<STRONG>權限表</STRONG>中的id更改,那么<STRONG>權限映射表</STRONG>中的記錄也就更改了。</DIV>
<LI>
<DIV align=left>一個管理組可以執行的權限勢必將出錯,這是非常不希望的。</DIV></LI></UL>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>考慮到上面的情況,所以應該使用action字段相關聯,因為:</P>
<UL>
<LI>
<DIV
align=left>在<STRONG>權限表</STRONG>中,id可能發生變化,而action字段卻是在任何情況下也不可能發生變化的。</DIV>
<LI>
<DIV
align=left><STRONG>權限映射表</STRONG>中記錄的action字段也就不會變。</DIV>
<LI>
<DIV align=left>一個管理組可以執行的權限就不會出錯了。</DIV></LI></UL>
<P align=left><STRONG>二 人員映射表</STRONG> 如下圖:</P>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>我們來了解一下<STRONG>人員映射表</STRONG>與<STRONG>管理組表</STRONG>以及<STRONG>人員表</STRONG>之間的字段關聯,如下圖:</P>
<P align=center><IMG height=324
src="實現業務系統中的用戶權限管理--設計篇.files/13.gif" width=442></P>
<P align=left> </P>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>看圖中的紅圈部分,先看groupid字段關聯,這種關聯方式在數據庫中的表現如下圖:</P>
<P align=center><IMG height=109
src="實現業務系統中的用戶權限管理--設計篇.files/10.gif" width=437></P>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>如圖,“超級管理員”組的groupid為1,我們再看<STRONG>人員映射表</STRONG>,admin屬于超級管理員組,而administrator屬于超級管理員組,同時也屬于管理員組。</P>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>使用這種關聯方式,是為了查到一個管理組中的人員有誰。和上面一樣,人員的詳細信息是靠id字段(<STRONG>人員映射表</STRONG>中是masterid字段)關聯查詢到的。</P>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>id字段(<STRONG>人員映射表</STRONG>中是masterid字段)關聯表現在數據庫中的形式如下圖:</P>
<P align=center><IMG height=108
src="實現業務系統中的用戶權限管理--設計篇.files/12.gif" width=526></P>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>一個人員可能同時屬于多個“管理組”,如圖中,administrator就同時屬于兩個“管理組”。所以,在<STRONG>人員映射表</STRONG>中關于administrator的記錄就會是兩條。</P>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>這種關聯方式才查詢到管理組中人員的詳細信息有哪些。綜合起來,才可以知道一個管理組中的人員有誰,以及這個人員的詳細信息。</P>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>再結合上面談到的<STRONG>權限表</STRONG>和<STRONG>權限映射表</STRONG>,就實現了需求中的“組”操作,如下圖:</P>
<P align=center><IMG height=323
src="實現業務系統中的用戶權限管理--設計篇.files/14.gif" width=636></P>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>其實,<STRONG>管理組表</STRONG>中僅僅記錄著組的基本信息,如名稱,組id等等。至于一個組中人員的詳細信息,以及該組能夠執行的權限的詳細信息,都記錄在<STRONG>人員表</STRONG>和<STRONG>權限表</STRONG>中。兩張<STRONG>映射表</STRONG>才真正記錄著一個組有哪些人員,能夠執行哪些權限。通過兩張映射表的銜接,三張實體表之間的交互才得以實現,<STRONG>從而完成了需求中提到的“組”操作</STRONG>。</P>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>我們再來看一下<STRONG>權限分欄表</STRONG>與<STRONG>權限表</STRONG>之間的交互。這兩張表之間的字段關聯如下圖:</P>
<P align=center><IMG height=142
src="實現業務系統中的用戶權限管理--設計篇.files/19.gif" width=334></P>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>兩張表使用了actioncolumnid字段相關聯,這種關聯方式在數據庫中的表現如下圖:</P>
<P align=center><IMG height=363
src="實現業務系統中的用戶權限管理--設計篇.files/18.gif" width=531></P>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>如圖所示,通過這種關聯方式,我們可以非常清晰的看到<STRONG>權限表</STRONG>中的權限屬于哪個分欄。</P>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>現在,數據庫結構已經很清晰了,分配權限的功能以及“組”操作都已經實現。下面我們再來分析一下需求中提到的關于權限管理系統的重用性問題。</P>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>為什么使用這種數據庫設計方式搭建起來的系統可以重用呢?</P>
<UL>
<LI>
<DIV
align=left><STRONG>三張實體表中記錄著系統中的三個決定性元素。</STRONG>“權限”,“組”和“人”。而這三種元素可以任意添加,彼此之間不受影響。無論是那種類型的業務系統,這三個決定性元素是不會變的,也就意味著結構上不會變,而變的僅僅是數據。</DIV>
<LI>
<DIV
align=left><STRONG>兩張映射表中記錄著三個元素之間的關系。</STRONG>但這些關系完全是人為創建的,需要變化的時候,只是對數據庫中的記錄進行操作,無需改動結構。</DIV>
<LI>
<DIV
align=left><STRONG>權限分欄表中記錄著系統使用時顯示的分欄</STRONG>。無論是要添加分欄,修改分欄還是減少分欄,也只不過是操作記錄而已。</DIV></LI></UL>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>綜上所述,這樣設計數據庫,系統是完全可以重用的,并且經受得住“變更”考驗的。</P>
<P align=left><STRONG>總結:</STRONG></P>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>此套系統的重點在于,三張<STRONG>實體表</STRONG>牢牢地抓住了系統的核心成分,而兩張映射表完美地映射出三張實體表之間的交互。其難點在于,理解映射表的工作,它記錄著關系,并且實現了“組”操作的概念。而系統總體的設計是本著可以在不同的MIS系統中“重用”來滿足不同系統的功能權限設置。</P>
<P align=left><STRONG>附錄:</STRONG></P>
<P align=center><STRONG><A
name=biao></A>權限管理系統數據表的字段設計</STRONG></P>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>下面我們來看看權限管理系統的數據庫表設計,共分為六張表,如下圖:</P>
<BLOCKQUOTE>
<P align=left>action表:</P></BLOCKQUOTE>
<P align=center><EM><IMG height=119
src="實現業務系統中的用戶權限管理--設計篇.files/datebase1.gif"
width=502></EM></P>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>action表中記錄著系統中所有的動作,以及動作相關描述。</P>
<BLOCKQUOTE>
<P align=left>actioncolumn表:</P></BLOCKQUOTE>
<P align=center><IMG height=75
src="實現業務系統中的用戶權限管理--設計篇.files/datebase2.gif" width=459></P>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>actioncolumn表中記錄著動作的分欄,系統運行時,左側菜單欄提供了幾塊不同的功能,每一塊就是一個分欄,每添加一個分欄,該表中的記錄就會增加一條,相對應的,左側菜單欄中也會新增機一個欄。</P>
<BLOCKQUOTE>
<P align=left>actiongroup表:</P></BLOCKQUOTE>
<P align=center><IMG height=135
src="實現業務系統中的用戶權限管理--設計篇.files/datebase3.gif" width=498></P>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>actiongroup表記錄著動作所在的組。</P>
<BLOCKQUOTE>
<P align=left>groupmanager表:</P></BLOCKQUOTE>
<P align=center><IMG height=135
src="實現業務系統中的用戶權限管理--設計篇.files/datebase4.gif" width=405></P>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>groupmanager表記錄著管理組的相關信息,每添加一個管理組,這里的記錄就會增加一條。</P>
<BLOCKQUOTE>
<P align=left>mastergroup表:</P></BLOCKQUOTE>
<P align=center><IMG height=150
src="實現業務系統中的用戶權限管理--設計篇.files/datebase6.gif" width=444></P>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>mastergroup表記錄著管理員所在的管理組,由于一名管理員可能同同時屬于多個組,所以該表中關于某一名管理員的記錄可能有多條。</P>
<BLOCKQUOTE>
<P align=left>master表:</P></BLOCKQUOTE>
<P align=center><IMG height=300
src="實現業務系統中的用戶權限管理--設計篇.files/datebase5.gif" width=409></P>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>master表記錄著所有管理員的信息,每添加一個管理員,該表就會增加一條記錄。</P>
<P align=left> </P>
<P> 歡迎繼續閱讀:<STRONG><A
href="http://www.noahweb.net/mail/2/Project_1.htm">實現業務系統中的用戶權限管理--實現篇</A></STRONG><BR></P>
<P></P>
<P> </P></TD></TR>
<TR>
<TD align=middle> </TD></TR></TBODY></TABLE><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋體; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: ZH-CN; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"></SPAN></DIV></TD></TR>
<TR>
<TD class=text vAlign=top align=right height=100>
<P><BR><FONT color=#000000>
<HR SIZE=1>
</FONT><BR><EM><FONT color=#999999> <SPAN
class=style2> </SPAN></FONT></EM> <SPAN class=style2><FONT
style="FONT-SIZE: 10px"
color=#000000><EM>NoahWeb</EM></FONT></SPAN><FONT
style="FONT-SIZE: 10px" color=#000000><EM>因您而精彩!</EM></FONT><FONT
style="FONT-SIZE: 10px" color=#000000><EM></EM></FONT><BR><FONT
style="FONT-SIZE: 10px" color=#999999><EM> </EM></FONT>
<P></P></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></DIV></BODY></HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -