漫談權(quán)限系統(tǒng) I

          從權(quán)限系統(tǒng)談起,我想只要工作了幾年的一般都會(huì)對(duì)這個(gè)有接觸,特別是做項(xiàng)目的,^_^,可能很多都自己做過(guò)權(quán)限系統(tǒng),一般來(lái)說(shuō)權(quán)限系統(tǒng)主要需要做到以下幾種情況的控制:
          1、身份認(rèn)證。主要是控制訪問(wèn)系統(tǒng)的用戶的身份,以確定用戶是否有足夠的身份進(jìn)行操作。
          2、系統(tǒng)菜單、按鈕的控制。需要根據(jù)權(quán)限顯示相應(yīng)的菜單和按鈕,這種主要是控制顯示級(jí)別的以及用戶正常訪問(wèn)系統(tǒng)操作。
          3、系統(tǒng)操作的控制。需要根據(jù)權(quán)限來(lái)控制用戶是否有權(quán)進(jìn)行某操作,這個(gè)主要是控制避免用戶通過(guò)不正常的方式來(lái)訪問(wèn)系統(tǒng)的操作。(如通過(guò)直接敲url等)
          4、系統(tǒng)資源級(jí)別的控制。這個(gè)就比較復(fù)雜些,需要控制用戶可以看到哪些資源,而資源通常又分成很多種操作級(jí)別的資源,如對(duì)資源進(jìn)行管理時(shí)看到的就是用戶擁有管理權(quán)限的資源,如只是對(duì)資源進(jìn)行訪問(wèn)時(shí)看到的則為用戶擁有訪問(wèn)權(quán)限的資源,更為復(fù)雜的情況是資源要求支持權(quán)限繼承的情況,就是對(duì)父資源進(jìn)行授權(quán)后,相應(yīng)的子資源也擁有同樣的權(quán)限。

          對(duì)應(yīng)以上的需求,在權(quán)限系統(tǒng)中采用的最多的兩種實(shí)現(xiàn)方式是RBAC和ACL,無(wú)論是RBAC還是ACL,對(duì)應(yīng)以上的需求都是可以實(shí)現(xiàn)的,只是實(shí)現(xiàn)起來(lái)的復(fù)雜度不同,還有就是用戶操作起來(lái)的易用性不同。
          上面的需求講的基本是非常實(shí)際的需求,歸納性的和更為合理的描述大家可以看看acegi reference guide里面的描述。
          實(shí)現(xiàn)權(quán)限系統(tǒng)來(lái)講,個(gè)人覺(jué)得主要是兩個(gè)方面:
          1、授權(quán)。主要是授權(quán)模型的維護(hù),如資源權(quán)限、角色、用戶的對(duì)應(yīng)關(guān)系等。
          2、校驗(yàn)權(quán)限。校驗(yàn)權(quán)限根據(jù)需求主要有校驗(yàn)對(duì)于資源進(jìn)行操作的權(quán)限,用戶身份的校驗(yàn),還有一種就是資源操作權(quán)限的校驗(yàn)。
          在這里主要以RBAC來(lái)說(shuō)說(shuō),RBAC規(guī)范中RBAC主要分為四個(gè)級(jí)別,分別為RBAC 0、RBAC 1、RBAC 2和RBAC 3。
          RBAC 0又稱為Core RBAC,實(shí)現(xiàn)的為基本的權(quán)限模型,如用戶與角色、角色與資源權(quán)限、資源權(quán)限與資源、資源操作的關(guān)系的維護(hù),同時(shí)提供基于角色的資源操作權(quán)限的校驗(yàn),類似的偽代碼:role.doPrivilege(Principle,Resource,Operation),相對(duì)來(lái)講RBAC 0是比較容易實(shí)現(xiàn)的,在RBAC 0中進(jìn)行權(quán)限校驗(yàn)時(shí)的關(guān)鍵就是根據(jù)用戶的角色來(lái)檢驗(yàn)用戶是否有操作的權(quán)限。
          RBAC 1中提出了角色權(quán)限繼承的實(shí)現(xiàn),雖然看起來(lái)只是增加了一個(gè)角色權(quán)限繼承,但在實(shí)現(xiàn)起來(lái)系統(tǒng)的復(fù)雜度則是大大的增加了,在RBAC 0中校驗(yàn)一個(gè)用戶是否擁有對(duì)某資源的操作權(quán)限時(shí)只需校驗(yàn)用戶的角色即可,現(xiàn)在則變成了除了需要校驗(yàn)用戶的角色權(quán)限外,在用戶角色權(quán)限不足的情況下還需校驗(yàn)其父角色的權(quán)限,這個(gè)在系統(tǒng)效率方面必然會(huì)造成影響,但其實(shí)對(duì)于資源操作來(lái)講還算是比較好處理的,因?yàn)楫吘箍梢酝ㄟ^(guò)緩存等等技術(shù)來(lái)解決,但對(duì)于系統(tǒng)資源級(jí)別的權(quán)限控制來(lái)說(shuō)則變得更為復(fù)雜多了,因?yàn)樵谶M(jìn)行系統(tǒng)資源級(jí)別權(quán)限控制時(shí)通常需要分頁(yè)的獲取有權(quán)限的資源,而通常分頁(yè)我們需要依賴數(shù)據(jù)庫(kù)進(jìn)行實(shí)現(xiàn),也就是說(shuō)并不是直接獲取所有的資源然后再進(jìn)行分頁(yè),這樣在進(jìn)行大量資源訪問(wèn)的時(shí)候是會(huì)出現(xiàn)問(wèn)題的,這個(gè)時(shí)候問(wèn)題就很明顯的出現(xiàn)了,因?yàn)橥ㄟ^(guò)RBAC模型的話我們只能做到先獲取出所有的資源,然后進(jìn)行權(quán)限過(guò)濾,而且這個(gè)時(shí)候在進(jìn)行權(quán)限過(guò)濾的時(shí)候會(huì)比較的麻煩,需要去校驗(yàn)用戶的角色以及父角色,不斷的判斷,這個(gè)時(shí)候其實(shí)ACL的優(yōu)點(diǎn)倒是體現(xiàn)了,因?yàn)榘凑誂CL的話是可以直接獲取出用戶有權(quán)限訪問(wèn)的資源的,這樣的話分頁(yè)其實(shí)同樣不是問(wèn)題了,但ACL的麻煩同樣也在繼承這個(gè)地方,這樣的話授權(quán)模型會(huì)非常復(fù)雜,因?yàn)樵谑跈?quán)的時(shí)候需要維護(hù)好ACL這張表,把用戶所在的角色的父角色的權(quán)限也要考慮進(jìn)來(lái),同時(shí)維護(hù)ACL的表,而且在角色變動(dòng)的時(shí)候也要去維護(hù)ACL表,可以看出這其實(shí)也是很復(fù)雜的,就舉一個(gè)簡(jiǎn)單的例子,如果一個(gè)父角色下有幾十個(gè)子角色,那么在父角色對(duì)于資源訪問(wèn)的權(quán)限變動(dòng)時(shí)那么所有的子角色的資源都需變動(dòng),這個(gè)時(shí)候ACL表就得變動(dòng)。
          RBAC 2則更為復(fù)雜,RBAC 2中提出了角色權(quán)限互斥的問(wèn)題,其實(shí)在角色權(quán)限繼承的基礎(chǔ)上我們就會(huì)考慮到這個(gè)問(wèn)題,既然角色權(quán)限繼承那么很容易出現(xiàn)權(quán)限互斥的問(wèn)題,RBAC 2模型就是為了解決這個(gè)。
          RBAC 3則沒(méi)什么說(shuō)的,因?yàn)樗褪荝BAC 1和RBAC 2都實(shí)現(xiàn)。

          上面講的是沒(méi)什么章理去了,呵呵,不好意思,其實(shí)不管采用什么模型,對(duì)用戶而言重要的是授權(quán)的簡(jiǎn)易性和校驗(yàn)權(quán)限的高效性,當(dāng)然,還有就是權(quán)限控制的有效性,而RBAC模型和ACL模型都是為了這個(gè)目標(biāo)而去,其實(shí)通過(guò)上面的大概介紹可以看出,RBAC模型在授權(quán)模型上會(huì)比較的簡(jiǎn)單和清晰,而ACL模型則在校驗(yàn)權(quán)限上比較的簡(jiǎn)單和高效,所以說(shuō)兩者各有優(yōu)缺點(diǎn),如果有什么能兩者都實(shí)現(xiàn)的就好了,因?yàn)閮烧叩膬?yōu)點(diǎn)其實(shí)也是非常的映射出兩者的缺點(diǎn)。
          其實(shí)在沒(méi)有權(quán)限繼承的時(shí)候權(quán)限系統(tǒng)的時(shí)候是比較容易的,但為了提高系統(tǒng)管理的方便,權(quán)限繼承也是不可避免的會(huì)出現(xiàn),這個(gè)時(shí)候就要考慮在什么時(shí)候去完成權(quán)限繼承,是授權(quán)時(shí)完成還是校驗(yàn)權(quán)限時(shí)完成,授權(quán)時(shí)完成就會(huì)造成授權(quán)模型的復(fù)雜,但可以保證校驗(yàn)權(quán)限時(shí)的簡(jiǎn)便,校驗(yàn)權(quán)限時(shí)完成則可保證授權(quán)時(shí)的簡(jiǎn)單,但造成校驗(yàn)權(quán)限時(shí)的低效。
          最后針對(duì)以上需求來(lái)說(shuō),還是認(rèn)為1、2、3點(diǎn)需求是比較容易做到的,即使在權(quán)限繼承的情況下也不是那么的難,但對(duì)于需求4來(lái)說(shuō)目前仍然沒(méi)有想出很好的辦法,目前的做法只能是ACL,也就是增加授權(quán)時(shí)的復(fù)雜,但保證校驗(yàn)權(quán)限時(shí)的簡(jiǎn)單。

          這篇作為漫談權(quán)限系統(tǒng)的開篇,講的可能有些混亂了,在第二篇中將重點(diǎn)來(lái)描述RBAC和ACL分別實(shí)現(xiàn)需求1、2、3的方法。

          posted on 2005-10-05 23:09 BlueDavy 閱讀(3837) 評(píng)論(5)  編輯  收藏 所屬分類: Java系統(tǒng)設(shè)計(jì)

          評(píng)論

          # re: 漫談權(quán)限系統(tǒng) I 2005-10-06 13:28 ben

          期待您的權(quán)限系統(tǒng)系列文章,最近正好在學(xué)習(xí)這個(gè). :)  回復(fù)  更多評(píng)論   

          # re: 漫談權(quán)限系統(tǒng) I 2005-10-08 13:35 znjq

          to ben:

          http://znjqolf.blogdriver.com/znjqolf/635601.html
            回復(fù)  更多評(píng)論   

          # re: 漫談權(quán)限系統(tǒng) I 2005-10-10 17:43 chenzugang

          資源權(quán)限的控制目前一般都當(dāng)作業(yè)務(wù)邏輯的一部分來(lái)處理的,所以我們一般只實(shí)現(xiàn)1,2,3的需求  回復(fù)  更多評(píng)論   

          # re: 漫談權(quán)限系統(tǒng) I 2006-02-15 17:00 xmlbjtu

          非常感謝你發(fā)布的文章,不知你的第二篇發(fā)布了嗎?非常期待。  回復(fù)  更多評(píng)論   

          # re: 漫談權(quán)限系統(tǒng) I 2006-02-15 20:14 BlueDavy

          有的呀,見(jiàn)
          http://www.aygfsteel.com/BlueDavy/category/1911.html?Show=All
          可以看到有漫談權(quán)限系統(tǒng)系列。  回復(fù)  更多評(píng)論   

          公告

           









          feedsky
          抓蝦
          google reader
          鮮果

          導(dǎo)航

          <2005年10月>
          2526272829301
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          統(tǒng)計(jì)

          隨筆分類

          隨筆檔案

          文章檔案

          Blogger's

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 鄱阳县| 浠水县| 宣城市| 丁青县| 日照市| 左贡县| 延边| 巴彦淖尔市| 常州市| 始兴县| 儋州市| 揭东县| 咸丰县| 宁国市| 根河市| 无为县| 铁岭市| 英德市| 宁化县| 天津市| 云安县| 神池县| 凌云县| 韩城市| 饶平县| 长顺县| 循化| 乌审旗| 连州市| 思南县| 顺义区| 青田县| 禹州市| 安国市| 体育| 西宁市| 库车县| 刚察县| 石棉县| 孝昌县| 河北省|