漫談權(quán)限系統(tǒng)之結(jié)尾篇(開源產(chǎn)品、個(gè)人觀點(diǎn)、知識(shí)體系)
一. 開源產(chǎn)品
對(duì)開源的產(chǎn)品了解不多,所以也只能大概的談?wù)劊_源的產(chǎn)品中比較知名的有poweracl、acegi,poweracl從名字就可以看出其是基于ACL模型的,不怎么了解所以在此也不去評(píng)價(jià)了。
Acegi作為JAVA界知名的權(quán)限系統(tǒng),從其文檔看來(lái)是能滿足上述的權(quán)限系統(tǒng)的所有需求,其reference文檔也對(duì)權(quán)限系統(tǒng)進(jìn)行了系統(tǒng)的歸納,非常的不錯(cuò),建議去看看。
在Acegi中授權(quán)模型以及資源權(quán)限的校驗(yàn)仍然是基于RBAC模型,在數(shù)據(jù)權(quán)限方面也就是在reference文檔中它稱為Domain Object Instance的部分,是基于ACL模型的實(shí)現(xiàn),曾經(jīng)翻閱它此部分的代碼,根據(jù)代碼表現(xiàn)它并不支持Domain Object Instance的權(quán)限的繼承,并且對(duì)于獲取的Domain Object Instance也是沒(méi)法采用分頁(yè)的方式獲取。
看了Acegi的代碼覺(jué)得其授權(quán)應(yīng)該是比較高效的,但在校驗(yàn)權(quán)限上效率恐怕也會(huì)比較的低,因?yàn)闄?quán)限的繼承是在校驗(yàn)權(quán)限通過(guò)遞規(guī)來(lái)實(shí)現(xiàn)的,雖然引入了緩存機(jī)制但仍然無(wú)法從根本上解決此問(wèn)題,而且此緩存的維護(hù)也不是一件容易的事。
但Acegi的優(yōu)點(diǎn)也不可忽略,作為權(quán)限系統(tǒng)有一個(gè)很容易產(chǎn)生的問(wèn)題就是對(duì)原有系統(tǒng)產(chǎn)生非常大的侵入,并最終導(dǎo)致原有系統(tǒng)與此權(quán)限系統(tǒng)形成了非常強(qiáng)的耦合,Acegi在這點(diǎn)上則做的比較好,通過(guò)使用Filter、Interceptor以及AOP Weaver技術(shù)來(lái)盡量保證對(duì)原有系統(tǒng)最少的改動(dòng)。
二. 個(gè)人觀點(diǎn)
權(quán)限系統(tǒng)作為各種系統(tǒng)中都需要的一個(gè)子系統(tǒng),具有很廣的需求面,無(wú)論做什么系統(tǒng),首要重要的仍然是需求,盡管權(quán)限系統(tǒng)在各個(gè)系統(tǒng)中都有需求,但仍然是不盡相同,所以首先要明確所面對(duì)的系統(tǒng)到底是一個(gè)什么樣的系統(tǒng),對(duì)于權(quán)限有什么樣的需求,根據(jù)需求可以根據(jù)相應(yīng)的實(shí)現(xiàn)方案來(lái)做出自己的設(shè)計(jì)。
權(quán)限系統(tǒng)主要由授權(quán)和校驗(yàn)權(quán)限兩大部分組成,授權(quán)效率和校驗(yàn)權(quán)限的效率通常會(huì)產(chǎn)生沖突,個(gè)人覺(jué)得首先要保證校驗(yàn)權(quán)限的效率,畢竟系統(tǒng)需要校驗(yàn)權(quán)限的地方會(huì)非常的多,但授權(quán)動(dòng)作相對(duì)來(lái)講觸發(fā)的會(huì)比較的少。
從技術(shù)需求上來(lái)講,權(quán)限系統(tǒng)對(duì)外部系統(tǒng)而言最好做到黑盒的效果,為了減少對(duì)外部系統(tǒng)的侵入,在根據(jù)業(yè)務(wù)需求分析的基礎(chǔ)上形成權(quán)限系統(tǒng)的輸入和輸出需求,從通常的功能需求角度來(lái)大致的闡述:
1. 身份認(rèn)證
在B/S結(jié)構(gòu)的系統(tǒng)中通常通過(guò)增加Filter來(lái)達(dá)到實(shí)現(xiàn)身份認(rèn)證的功能,這樣不會(huì)造成對(duì)原有系統(tǒng)的改動(dòng)。
2. 授權(quán)模型
授權(quán)模型則需外部系統(tǒng)根據(jù)此模型建立相應(yīng)的授權(quán)UI以及交互,當(dāng)然,權(quán)限系統(tǒng)本身也可提供默認(rèn)的實(shí)現(xiàn)方式。
3. 資源權(quán)限校驗(yàn)
在資源權(quán)限的校驗(yàn)上可通過(guò)Proxy或Before Interceptor的方式來(lái)做到對(duì)資源操作的權(quán)限控制。
4. 數(shù)據(jù)權(quán)限校驗(yàn)
在很多時(shí)候需要區(qū)分好數(shù)據(jù)權(quán)限和業(yè)務(wù)邏輯,不要將業(yè)務(wù)邏輯形式的數(shù)據(jù)控制也借用數(shù)據(jù)權(quán)限來(lái)實(shí)現(xiàn),數(shù)據(jù)權(quán)限的引入很容易對(duì)現(xiàn)有的系統(tǒng)模塊造成影響,在此塊的設(shè)計(jì)上要特別注意避免造成對(duì)原有系統(tǒng)模塊過(guò)多的侵入。
5. 權(quán)限校驗(yàn)的體現(xiàn)
在權(quán)限校驗(yàn)的體現(xiàn)上基本主要是表現(xiàn)在菜單、按鈕以及數(shù)據(jù)的顯示上,菜單、按鈕通常通過(guò)標(biāo)簽的方式來(lái)控制,數(shù)據(jù)的顯示控制則需結(jié)合數(shù)據(jù)權(quán)限校驗(yàn)部分來(lái)實(shí)現(xiàn)。
到現(xiàn)在為止也做了幾個(gè)權(quán)限系統(tǒng)了,目前仍然沒(méi)做出讓自己滿意的權(quán)限系統(tǒng),此文作為拋磚引玉的文章,也希望大家能夠給出自己所做的解決方案。
三. 涉及的知識(shí)體系
根據(jù)上面的描述以及結(jié)合自己的經(jīng)驗(yàn),形成搭建權(quán)限系統(tǒng)所需的知識(shí)體系:
圖表 6 權(quán)限系統(tǒng)知識(shí)體系
posted on 2005-10-14 20:17 BlueDavy 閱讀(3780) 評(píng)論(3) 編輯 收藏 所屬分類: 系統(tǒng)設(shè)計(jì)