唐云
權(quán)限功能的設(shè)計一直是軟件設(shè)計中復雜又不可逃避的問題,如何實現(xiàn)權(quán)限與系統(tǒng)功能設(shè)計的分離,實現(xiàn)松散彈性架構(gòu)權(quán)限模型是研究的重點。文章首先對數(shù)據(jù)操作的權(quán)限模型進行討論分析,然后討論角色與數(shù)據(jù)操作的權(quán)限模型,接著以抽象數(shù)據(jù)為對象來討論角色與對象操作的權(quán)限模型,最后討論松散彈性可裝配的角色設(shè)計和對象權(quán)限設(shè)計。
1引言
軟件設(shè)計中權(quán)限模型的設(shè)計一直是軟件設(shè)計師努力思考的關(guān)鍵問題之一。一方面,要設(shè)計一種能實現(xiàn)軟件全部功能的權(quán)限模型;另一方面還要考慮權(quán)限模型的彈性,使其可方便地擴展,為軟件在生命周期內(nèi)能適應(yīng)需求的適當變化。設(shè)計一種具有普遍適應(yīng)性的,能提供松散耦合的完美權(quán)限模型一直是許多軟件工程師追求的目標。這種模型將不依賴某一特定的平臺、語言,能平滑地嵌入到各類軟件研發(fā)模型中去,并提供API、控件,甚至Web Service等表現(xiàn)方式。對于權(quán)限的控制實現(xiàn)對數(shù)據(jù)層、邏輯層和表現(xiàn)層內(nèi)在的元素都能定義,對權(quán)限等級的增加也能應(yīng)付自如。
2數(shù)據(jù)操作權(quán)限的唯一表示
軟件權(quán)限控制離不開數(shù)據(jù)流的分析,對于數(shù)據(jù)流的分析,無論是基于數(shù)據(jù)庫,還是內(nèi)存通??梢詺w結(jié)為添加、刪除、修改和查詢。假設(shè)我們令添加權(quán)值為1,刪除為2,修改為4,查詢?yōu)?。則數(shù)據(jù)的權(quán)限可以由4種操作的權(quán)值累加表示,且累加值權(quán)限唯一。如下表所示。
根據(jù)前面的證明,角色和數(shù)據(jù)操作權(quán)值的累加權(quán)值將是唯一的權(quán)值。
4基于權(quán)值累加的權(quán)限模型
系統(tǒng)中權(quán)限的分配就是通過這樣的權(quán)值疊加實現(xiàn),如系主任可以對本系教師的基本情況查詢和修改,但對自己的基本情況只有查詢的權(quán)限,那么它的權(quán)限應(yīng)該為:
系主任權(quán)限=(32)部門權(quán)限+查詢(1)+修改(4)+(16)個人權(quán)限+查詢(1)=54
這樣,算出系主任權(quán)限=54,軟件設(shè)計的時候給系主任對教師數(shù)據(jù)的操作分配一個54的權(quán)值。
不光對于教師數(shù)據(jù)這樣定義,對于學生數(shù)據(jù)也同樣處理,對任意表都這樣定義,即在數(shù)據(jù)庫中設(shè)計一個表來存放用戶及其對應(yīng)的、定義好的權(quán)限權(quán)值。
用戶登錄后獲得累加權(quán)值,然后通過一個函數(shù)將累加權(quán)值分解為最小顆粒的權(quán)值。當用戶操作數(shù)據(jù)時將比較用戶的權(quán)值是否包含對于該數(shù)據(jù)的操作權(quán)力,包含則允許操作,否則拒絕。
以上分析的是對于數(shù)據(jù)庫中的表的操作,可以把數(shù)據(jù)表看成1個對象,把對數(shù)據(jù)的操作再抽象成是對象的操作權(quán)限。在數(shù)據(jù)層的對象是表,在邏輯層的權(quán)限控制對象則可以是1個類對象,在表示層則可以是1個容器或者1組控件,甚至是1個硬件設(shè)備??梢詫θ我庖鰴?quán)限控制的對象都定義權(quán)值,然后通過累加權(quán)值來實現(xiàn)彈性權(quán)限模型。
在數(shù)據(jù)庫中這些對象的定義可以用一組權(quán)限表來存放,可以按業(yè)務(wù)分層來定義,也可以按功能結(jié)構(gòu)來定義。這樣的定義實現(xiàn)了松散、可任意重組的權(quán)限模型。
不難看出這樣的權(quán)限模型對于新角色的添加和新功能的添加只需要增加權(quán)值即可實現(xiàn),對于已有權(quán)限的重新定義同樣也可完成。不光如此,模型現(xiàn)在的定義是在自然數(shù)中定義的,我們還可以在負數(shù)域中擴展,實現(xiàn)更復雜的多維權(quán)限設(shè)計。
5權(quán)限模型的應(yīng)用形式
權(quán)限模型在系統(tǒng)中實現(xiàn)的時候可以被封裝為控件或者API。對于一種應(yīng)用廣泛的系統(tǒng)權(quán)限,甚至可以設(shè)計成Web Service提供許多具有相同功能的系統(tǒng),實現(xiàn)復用。
6結(jié)束語
軟件設(shè)計中權(quán)限模型的分離,有助于軟件工程師們對于軟件的系統(tǒng)功能進行更獨立的設(shè)計。在一些系統(tǒng)中甚至只需要考慮設(shè)計實現(xiàn)一個具有完全功能的系統(tǒng),然后根據(jù)權(quán)限模型構(gòu)建所需要的各種權(quán)限功能。加強和豐富這樣一個松散彈性的權(quán)限模型框架,使其能更有效地提高軟件設(shè)計效率,這是今后值得努力研究的一個方向。