唐云
權限功能的設計一直是軟件設計中復雜又不可逃避的問題,如何實現(xiàn)權限與系統(tǒng)功能設計的分離,實現(xiàn)松散彈性架構權限模型是研究的重點。文章首先對數據操作的權限模型進行討論分析,然后討論角色與數據操作的權限模型,接著以抽象數據為對象來討論角色與對象操作的權限模型,最后討論松散彈性可裝配的角色設計和對象權限設計。
1引言
軟件設計中權限模型的設計一直是軟件設計師努力思考的關鍵問題之一。一方面,要設計一種能實現(xiàn)軟件全部功能的權限模型;另一方面還要考慮權限模型的彈性,使其可方便地擴展,為軟件在生命周期內能適應需求的適當變化。設計一種具有普遍適應性的,能提供松散耦合的完美權限模型一直是許多軟件工程師追求的目標。這種模型將不依賴某一特定的平臺、語言,能平滑地嵌入到各類軟件研發(fā)模型中去,并提供API、控件,甚至Web Service等表現(xiàn)方式。對于權限的控制實現(xiàn)對數據層、邏輯層和表現(xiàn)層內在的元素都能定義,對權限等級的增加也能應付自如。
2數據操作權限的唯一表示
軟件權限控制離不開數據流的分析,對于數據流的分析,無論是基于數據庫,還是內存通常可以歸結為添加、刪除、修改和查詢。假設我們令添加權值為1,刪除為2,修改為4,查詢?yōu)?。則數據的權限可以由4種操作的權值累加表示,且累加值權限唯一。如下表所示。

根據前面的證明,角色和數據操作權值的累加權值將是唯一的權值。
4基于權值累加的權限模型
系統(tǒng)中權限的分配就是通過這樣的權值疊加實現(xiàn),如系主任可以對本系教師的基本情況查詢和修改,但對自己的基本情況只有查詢的權限,那么它的權限應該為:
系主任權限=(32)部門權限+查詢(1)+修改(4)+(16)個人權限+查詢(1)=54
這樣,算出系主任權限=54,軟件設計的時候給系主任對教師數據的操作分配一個54的權值。
不光對于教師數據這樣定義,對于學生數據也同樣處理,對任意表都這樣定義,即在數據庫中設計一個表來存放用戶及其對應的、定義好的權限權值。

用戶登錄后獲得累加權值,然后通過一個函數將累加權值分解為最小顆粒的權值。當用戶操作數據時將比較用戶的權值是否包含對于該數據的操作權力,包含則允許操作,否則拒絕。
以上分析的是對于數據庫中的表的操作,可以把數據表看成1個對象,把對數據的操作再抽象成是對象的操作權限。在數據層的對象是表,在邏輯層的權限控制對象則可以是1個類對象,在表示層則可以是1個容器或者1組控件,甚至是1個硬件設備。可以對任意要做權限控制的對象都定義權值,然后通過累加權值來實現(xiàn)彈性權限模型。
在數據庫中這些對象的定義可以用一組權限表來存放,可以按業(yè)務分層來定義,也可以按功能結構來定義。這樣的定義實現(xiàn)了松散、可任意重組的權限模型。
不難看出這樣的權限模型對于新角色的添加和新功能的添加只需要增加權值即可實現(xiàn),對于已有權限的重新定義同樣也可完成。不光如此,模型現(xiàn)在的定義是在自然數中定義的,我們還可以在負數域中擴展,實現(xiàn)更復雜的多維權限設計。
5權限模型的應用形式
權限模型在系統(tǒng)中實現(xiàn)的時候可以被封裝為控件或者API。對于一種應用廣泛的系統(tǒng)權限,甚至可以設計成Web Service提供許多具有相同功能的系統(tǒng),實現(xiàn)復用。
6結束語
軟件設計中權限模型的分離,有助于軟件工程師們對于軟件的系統(tǒng)功能進行更獨立的設計。在一些系統(tǒng)中甚至只需要考慮設計實現(xiàn)一個具有完全功能的系統(tǒng),然后根據權限模型構建所需要的各種權限功能。加強和豐富這樣一個松散彈性的權限模型框架,使其能更有效地提高軟件設計效率,這是今后值得努力研究的一個方向。