?? 實現(xiàn)業(yè)務系統(tǒng)中的用戶權限管理--設計篇.htm
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0041)http://www.noahweb.net/mail/2/Project.htm -->
<HTML><HEAD><TITLE>實現(xiàn)業(yè)務系統(tǒng)中的用戶權限管理--設計篇</TITLE>
<STYLE type=text/css>.logicbiaoge {
BORDER-RIGHT: #333333 1px solid; TABLE-LAYOUT: fixed; BORDER-TOP: #333333 1px solid; FONT-SIZE: 12px; BORDER-LEFT: #333333 1px solid; COLOR: #333333; WORD-BREAK: break-all; BORDER-BOTTOM: #333333 1px solid; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; BACKGROUND-COLOR: #eeeeee; cellspacing: "10"
}
.style1 {
FONT-SIZE: 12px
}
.logicbiaoge1 {
BORDER-RIGHT: #333333 1px solid; TABLE-LAYOUT: fixed; BORDER-TOP: #333333 1px solid; FONT-SIZE: 12px; BORDER-LEFT: #333333 1px solid; COLOR: #333333; WORD-BREAK: break-all; BORDER-BOTTOM: #333333 1px solid; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; BACKGROUND-COLOR: #eeeeee; cellspacing: "10"
}
.logicbiaoge2 {
BORDER-RIGHT: #333333 1px solid; TABLE-LAYOUT: fixed; BORDER-TOP: #333333 1px solid; FONT-SIZE: 12px; BORDER-LEFT: #333333 1px solid; COLOR: #333333; WORD-BREAK: break-all; BORDER-BOTTOM: #333333 1px solid; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; BACKGROUND-COLOR: #eeeeee; cellspacing: "10"
}
CENTER {
FONT-SIZE: 12px
}
.style2 {
FONT-FAMILY: Arial, Helvetica, sans-serif
}
BODY {
FONT-SIZE: 12px; BACKGROUND-COLOR: #dee0e6
}
DIV {
FONT-SIZE: 12px
}
STRONG {
FONT-SIZE: 12px
}
P {
FONT-SIZE: 12px
}
</STYLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="MSHTML 6.00.2900.3492" name=GENERATOR></HEAD>
<BODY leftMargin=0 topMargin=0 marginheight="0" marginwidth="0">
<DIV>
<TABLE height="100%" cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD width=46 bgColor=#ff0000> </TD>
<TD vAlign=top align=left width="96%">
<TABLE height=401 cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD class=textCopy vAlign=center align=middle width="100%"
height="100%">
<DIV>
<TABLE class=textCopy cellSpacing=0 cellPadding=0 width="90%"
border=0>
<TBODY>
<TR>
<TD>
<P><A href="http://www.noahweb.net/pilot/" target=_blank><IMG
height=54 src="實現(xiàn)業(yè)務系統(tǒng)中的用戶權限管理--設計篇.files/pilotlogo.gif"
width=117 align=right border=0></A></P>
<P>
<CENTER>
<P> </P>
<P> </P>
<P><STRONG>實現(xiàn)業(yè)務系統(tǒng)中的用戶權限管理--設計篇</STRONG></P></CENTER>
<P></P>
<P><FONT
size=2><STRONG> </STRONG></FONT>B/S系統(tǒng)中的權限比C/S中的更顯的重要,C/S系統(tǒng)因為具有特殊的客戶端,所以訪問用戶的權限檢測可以通過客戶端實現(xiàn)或通過客戶端+服務器檢測實現(xiàn),而B/S中,瀏覽器是每一臺計算機都已具備的,如果不建立一個完整的權限檢測,那么一個“非法用戶”很可能就能通過瀏覽器輕易訪問到B/S系統(tǒng)中的所有功能。因此B/S業(yè)務系統(tǒng)都需要有一個或多個權限系統(tǒng)來實現(xiàn)訪問權限檢測,讓經(jīng)過授權的用戶可以正常合法的使用已授權功能,而對那些未經(jīng)授權的“非法用戶”將會將他們徹底的“拒之門外”。下面就讓我們一起了解一下如何設計可以滿足大部分B/S系統(tǒng)中對用戶功能權限控制的權限系統(tǒng)。</P>
<P> </P>
<P align=left><STRONG>需求陳述</STRONG></P>
<UL>
<LI>
<DIV
align=left><STRONG>不同職責的人員,對于系統(tǒng)操作的權限應該是不同的。</STRONG>優(yōu)秀的業(yè)務系統(tǒng),這是最基本的功能。</DIV>
<P></P>
<LI>
<DIV
align=left><STRONG>可以對“組”進行權限分配</STRONG>。對于一個大企業(yè)的業(yè)務系統(tǒng)來說,如果要求管理員為其下員工逐一分配系統(tǒng)操作權限的話,是件耗時且不夠方便的事情。所以,系統(tǒng)中就提出了對“組”進行操作的概念,將權限一致的人員編入同一組,然后對該組進行權限分配。</DIV>
<P></P>
<LI>
<DIV
align=left><STRONG>權限管理系統(tǒng)應該是可擴展的</STRONG>。它應該可以加入到任何帶有權限管理功能的系統(tǒng)中。就像是組件一樣的可以被不斷的重用,而不是每開發(fā)一套管理系統(tǒng),就要針對權限管理部分進行重新開發(fā)。</DIV>
<P></P>
<LI>
<DIV
align=left><STRONG>滿足業(yè)務系統(tǒng)中的功能權限。</STRONG>傳統(tǒng)業(yè)務系統(tǒng)中,存在著兩種權限管理,其一是功能權限的管理,而另外一種則是資源權限的管理,在不同系統(tǒng)之間,功能權限是可以重用的,而資源權限則不能。</DIV></LI></UL>
<P align=left><STRONG>關于設計</STRONG></P>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>借助NoahWeb的動作編程理念,在設計階段,系統(tǒng)設計人員無須考慮程序結構的設計,而是從程序流程以及數(shù)據(jù)庫結構開始入手。為了實現(xiàn)需求,數(shù)據(jù)庫的設計可謂及其重要,無論是“組”操作的概念,還是整套權限管理系統(tǒng)的重用性,都在于數(shù)據(jù)庫的設計。</P>
<P align=left>我們先來分析一下數(shù)據(jù)庫結構:</P>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>首先,action表(<STRONG>以下簡稱為“權限表”</STRONG>),gorupmanager表(<STRONG>以下簡稱為“管理組表”</STRONG>),以及master表(<STRONG>以下簡稱為“人員表”</STRONG>),是三張實體表,它們依次記錄著“權限”的信息,“管理組”的信息和“人員”的信息。如下圖:</P>
<P align=center><IMG height=328
src="實現(xiàn)業(yè)務系統(tǒng)中的用戶權限管理--設計篇.files/16.gif" width=460></P>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>這三個表之間的關系是多對多的,一個權限可能同時屬于多個管理組,一個管理組中也可能同時包含多個權限。同樣的道理,一個人員可能同時屬于多個管理組,而一個管理組中也可能同時包含多個人員。如下圖:</P>
<P align=center><IMG height=321
src="實現(xiàn)業(yè)務系統(tǒng)中的用戶權限管理--設計篇.files/1.gif" width=456></P>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>由于這三張表之間存在著多對多的關系,那么它們之間的交互,最好使用另外兩張表來完成。而這兩張表起著映射的作用,分別是“actiongroup”表<STRONG>(以下簡稱“權限映射表”)</STRONG>和“mastergroup”表<STRONG>(以下簡稱“人員映射表”)</STRONG>,前者映射了權限表與管理組表之間的交互。后者映射了人員表與管理組表之間的交互。如下圖:</P>
<P align=center><IMG height=318
src="實現(xiàn)業(yè)務系統(tǒng)中的用戶權限管理--設計篇.files/15.gif" width=637></P>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>另外,還需要一張表來控制系統(tǒng)運行時左側菜單中的權限分欄,也就是“權限分欄表”,如下圖:</P>
<P align=center><IMG height=318
src="實現(xiàn)業(yè)務系統(tǒng)中的用戶權限管理--設計篇.files/17.gif" width=637></P>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>根據(jù)上面的分析,我們進行數(shù)據(jù)庫結構設計,如下圖:</P>
<P align=left> <A
href="http://www.noahweb.net/mail/2/Project.htm#biao"
target=_blank>點擊這里查看權限管理系統(tǒng)數(shù)據(jù)表字段設計</A></P>
<P align=center><IMG height=320
src="實現(xiàn)業(yè)務系統(tǒng)中的用戶權限管理--設計篇.files/datebase.gif" width=624></P>
<P align=left> </P>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>為了能夠進行良好的分析,我們將數(shù)據(jù)庫結構圖拆分開來,三張實體表的作用已經(jīng)很清晰,現(xiàn)在我們來看一下兩張映射表的作用。</P>
<P align=left><STRONG>一 權限映射表</STRONG> 如下圖:</P>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>首先,我們來了解一下<STRONG>權限映射表</STRONG>與<STRONG>管理組表</STRONG>以及<STRONG>權限表</STRONG>之間的字段關聯(lián)。</P>
<P align=center><IMG height=159
src="實現(xiàn)業(yè)務系統(tǒng)中的用戶權限管理--設計篇.files/6.gif" width=457></P>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>看圖中的紅圈,先看gorupid字段相關聯(lián),這種關聯(lián)方式在實際數(shù)據(jù)庫中的表現(xiàn)如下圖:</P>
<P align=center><IMG height=152
src="實現(xiàn)業(yè)務系統(tǒng)中的用戶權限管理--設計篇.files/3.gif" width=534></P>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>如圖中所示,<STRONG>管理組表</STRONG>中“超級管理員”的groupid為1,那么<STRONG>權限映射表</STRONG>中groupid為1的權限也就是“超級管理員”所擁有的權限。</P>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>使用groupid字段關聯(lián),是為了查到一個管理組能夠執(zhí)行的權限有哪些。但這些權限的詳細信息卻是action字段關聯(lián)所查詢到的。</P>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>action字段相關聯(lián)在數(shù)據(jù)庫中的表現(xiàn)如下圖:</P>
<P align=center><IMG height=154
src="實現(xiàn)業(yè)務系統(tǒng)中的用戶權限管理--設計篇.files/5.gif" width=540></P>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>通過這種關聯(lián),才查詢到<STRONG>權限映射表</STRONG>之中那些權限的詳細信息。綜合起來,我們就知道了一個管理組可以執(zhí)行的權限有哪些,以及這些權限的詳細信息是什么。</P>
<P align=left><FONT
size=2><STRONG> </STRONG></FONT>或許你會問,為什么不使用actionid字段相關聯(lián)呢?因為:</P>
<UL>
<LI>
<DIV
align=left><STRONG>權限表</STRONG>中的id字段在經(jīng)過多次的數(shù)據(jù)庫操作之后可能會發(fā)生更改。</DIV>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -