隨筆-11  評(píng)論-16  文章-1  trackbacks-0
            2009年6月23日

           

          -------------------------------------------- 總大綱 ---------------------------------

          Ralasafe開(kāi)源有段時(shí)間了,大約有2個(gè)月了。根據(jù)社區(qū)的反饋,我打算圍繞Ralasafe最佳實(shí)踐,書(shū)寫(xiě)一系列BLOG。

           

          大體內(nèi)容有:

          1, 登錄控制: 哪些頁(yè)面需要登錄后才能訪(fǎng)問(wèn),登錄用戶(hù)名、密碼驗(yàn)證,登錄轉(zhuǎn)向頁(yè)面;

          2, URL權(quán)限控制:哪些頁(yè)面訪(fǎng)問(wèn)需要進(jìn)行角色權(quán)限驗(yàn)證,怎樣驗(yàn)證最簡(jiǎn)單有效,如何處理驗(yàn)證失敗情況;

          3, 數(shù)據(jù)級(jí)權(quán)限管理方案探討:選擇中間件呢還是框架?

          4, Ralasafe體系結(jié)構(gòu): 用戶(hù)怎么讀取,用戶(hù)有哪些字段,怎樣與應(yīng)用基礎(chǔ);

          5, 數(shù)據(jù)級(jí)查詢(xún)權(quán)限管理: 如何給不同的人分配不同的查詢(xún)數(shù)據(jù)權(quán)限,返回where條件呢,還是直接返回結(jié)果集?

          6, 數(shù)據(jù)級(jí)決策權(quán)限管理: 如何給不同的人分配不同的數(shù)據(jù)操作權(quán)限,當(dāng)用戶(hù)不具備權(quán)限怎么辦?

          7, 其他細(xì)小的權(quán)限控制: 如下拉框顯示內(nèi)容;按鈕、鏈接是否顯示,圖片是否顯示等。

          -------------------------------------------- ------- --------------------------------

           

           

          數(shù)據(jù)級(jí)權(quán)限管理需求

          數(shù)據(jù)級(jí)權(quán)限管理需求主要有:

          1,支持不同用戶(hù)查詢(xún)到數(shù)據(jù)是不同的;

          2,支持?jǐn)?shù)據(jù)庫(kù)行級(jí)、列級(jí)查詢(xún);

          3,支持分頁(yè)查詢(xún)——包括2個(gè)方面:a,分頁(yè)查出數(shù)據(jù);b,能告知總數(shù)據(jù)條數(shù)是多少;

          4,支持自定義條件(比如:張三在自己的查詢(xún)權(quán)限范圍內(nèi),查詢(xún)50w以上的訂單)。

          理論分析

          能夠?qū)?shù)據(jù)級(jí)權(quán)限,與業(yè)務(wù)分離出來(lái)——是多年來(lái)開(kāi)發(fā)人員追求的目標(biāo)。一旦遇到疑難雜癥,馬上會(huì)讓人聯(lián)想到高難度的API編程,或者絢麗的XML配置。

           

          不過(guò),我今天的分析,會(huì)極其簡(jiǎn)單。不過(guò)我強(qiáng)烈建議大家看下去。如果對(duì)該方案有所懷疑,請(qǐng)使用你的應(yīng)用案例進(jìn)行試驗(yàn)。我當(dāng)時(shí)不敢確認(rèn)的時(shí)候,就是這么做的。

          (當(dāng)初,我提出該方案的時(shí)候,我們團(tuán)隊(duì)認(rèn)為該方案過(guò)于簡(jiǎn)單,不可行。我堅(jiān)持讓他們實(shí)現(xiàn)該方案。等產(chǎn)品做出來(lái)后,他們略有所悟,認(rèn)為該方案可行。當(dāng),我讓他們做demo的時(shí)候,將該方案運(yùn)用于案例的時(shí)候,他們拍腿叫道:超級(jí)太棒了!我希望你也有該感受)

           

          分類(lèi)思想的提出

          首先,我們思考這個(gè)問(wèn)題:為什么我們?cè)诔绦蚶锩媸褂昧薸f/else?為什么數(shù)據(jù)級(jí)權(quán)限難以處理?

          原因就是:1,有很多種情況;2,我們需要針對(duì)不同的人、不同的情況做不同的權(quán)限邏輯。比如:

          if  是總公司用戶(hù)?  then 查詢(xún)所有訂單;  
          else if  是分公司用戶(hù)?  then 查詢(xún)本分公司(${用戶(hù)的公司})及下屬子公司訂單;  
          else //  是子公司用戶(hù)了  
          then 查詢(xún)本子公司訂單(${用戶(hù)的公司}) 

           

          在RBAC模型里面有用戶(hù)群組概念,也有不少開(kāi)發(fā)人員將用戶(hù)群組引入數(shù)據(jù)級(jí)權(quán)限管理領(lǐng)域。群組很好的將用戶(hù)歸組,但不足之處是要事先將用戶(hù)歸入組內(nèi)。比如,在將張三指定到“總公司用戶(hù)組”之前,他不屬于該用戶(hù)組,即便張三的機(jī)構(gòu)屬性顯示他屬于總公司。

          我們對(duì)群組進(jìn)行稍微改造:使用規(guī)則來(lái)定義群組,滿(mǎn)足該規(guī)則的用戶(hù),我們則認(rèn)為該用戶(hù)屬于該群組。傳統(tǒng)編程里面的if/else判斷條件,基本都可以使用規(guī)則或者規(guī)則表達(dá)式組來(lái)描述。此時(shí),張三的機(jī)構(gòu)屬性顯示是總公司,那么他就屬于總公司用戶(hù)組;如果他的機(jī)構(gòu)屬性是某個(gè)分公司,那么他就屬于分公司用戶(hù)組了。無(wú)需進(jìn)行額外操作(指定、重新指派等,一切都是動(dòng)態(tài)智能的)。

           

          OK,至此,我們提出了使用規(guī)則描述的“用戶(hù)分類(lèi)”。該規(guī)則應(yīng)該能讀取用戶(hù)信息、上下文信息、數(shù)據(jù)查詢(xún)等,并進(jìn)行相關(guān)運(yùn)算(比較、集合運(yùn)算等)

           

          至此,我們可以基于用戶(hù)要分類(lèi),為每個(gè)用戶(hù)分類(lèi)分配一個(gè)查詢(xún)。(該查詢(xún)可以接受相關(guān)參數(shù),比如用戶(hù)參數(shù)、上下文參數(shù)等)

          那么上述例子,使用分類(lèi)思想,可以這么解決:

          用戶(hù)分類(lèi):總公司用戶(hù)類(lèi) —— 查詢(xún):查詢(xún)所有訂單

          用戶(hù)分類(lèi):分公司用戶(hù)類(lèi) —— 查詢(xún):查詢(xún)本分公司及下屬子公司訂單;

          用戶(hù)分類(lèi):子公司用戶(hù)類(lèi) —— 查詢(xún):查詢(xún)本子公司訂單。

          與功能權(quán)限結(jié)合

          我認(rèn)為功能權(quán)限與數(shù)據(jù)權(quán)限分開(kāi)非常合適。功能權(quán)限由企業(yè)IT管理員維護(hù);數(shù)據(jù)權(quán)限由軟件開(kāi)發(fā)商維護(hù)。有人會(huì)說(shuō)這樣不好,比如這個(gè)案例怎么處理:

          普通審查員可以審查50w財(cái)務(wù)數(shù)據(jù);中級(jí)審查員審查50w~500w的財(cái)務(wù)數(shù)據(jù)。這個(gè)50w、500w,企業(yè)需要自行維護(hù)。

           

          OK,我認(rèn)為這50w、500w應(yīng)該稱(chēng)為“權(quán)限策略數(shù)據(jù)”,可以保存到數(shù)據(jù)庫(kù)里面,做為基礎(chǔ)數(shù)據(jù)或者數(shù)據(jù)字典由企業(yè)通過(guò)界面自行維護(hù)。而軟件開(kāi)發(fā)商,開(kāi)發(fā)的“數(shù)據(jù)級(jí)權(quán)限”策略讀取這些數(shù)據(jù)。(當(dāng)然,你可以緩存。。。。)

          Ralasafe方案

          怎樣實(shí)現(xiàn)數(shù)據(jù)級(jí)查詢(xún)權(quán)限

          為了理解本節(jié)內(nèi)容,建議下載ralasafe demo應(yīng)用,對(duì)照?qǐng)D形界面,更容易理解些。

          Ralasafe使用管理界面來(lái)定制用戶(hù)分類(lèi)、定制數(shù)據(jù)查詢(xún)。為了確保定制無(wú)誤,Ralasafe支持在線(xiàn)測(cè)試。比如定制用戶(hù)分類(lèi)后,可以選擇一個(gè)用戶(hù)進(jìn)行測(cè)試。數(shù)據(jù)查詢(xún)等都是可以在線(xiàn)測(cè)試的。

           

          定制完畢后,將用戶(hù)分類(lèi)和數(shù)據(jù)查詢(xún)配對(duì),賦給特點(diǎn)權(quán)限。一個(gè)權(quán)限,可以賦多個(gè)(用戶(hù)分類(lèi)——數(shù)據(jù)查詢(xún))配對(duì)。和前面的理論分析一樣。

           

          具體定制,怎樣配對(duì),可以參考文檔,配有圖片,在此不做多說(shuō)。定制用戶(hù)分類(lèi)定制數(shù)據(jù)查詢(xún)給權(quán)限授權(quán)策略(即配對(duì))。

          怎樣與應(yīng)用結(jié)合

          Ralasafe提供org.ralasafe.Ralasafeorg.ralasafe.WebRalasafe兩個(gè)接口類(lèi)。里面的query方法對(duì)應(yīng)數(shù)據(jù)級(jí)查詢(xún)權(quán)限。在應(yīng)用系統(tǒng)相應(yīng)的地方,調(diào)用該方法即可。我建議在系統(tǒng)的控制層調(diào)用,即:servlet或者action。

           

          ralasafe demo例子,EmployeServlet就是這么調(diào)用的:(demo演示員工查詢(xún),不是訂單查詢(xún)

          // 通過(guò)Ralasafe接口獲取當(dāng)前用戶(hù)被授權(quán)查看的員工  
          Collection employees = WebRalasafe.query(req, Privilege.QUERY_EMPLOYEE);  
          // 將數(shù)據(jù)放入request,供前臺(tái)展示  
          req.setAttribute("employees", employees);  

           

          OK,就這么簡(jiǎn)單。需要編程的工作量非常非常少,達(dá)到了極致。世界從此清凈了。

           

          (WebRalasafe.query方法接受req<HttpRequest>參數(shù),從這里讀取User。Ralasafe.query方法則直接傳入U(xiǎn)ser,可供非web類(lèi)應(yīng)用調(diào)用) 

          系統(tǒng)結(jié)構(gòu)

          Ralasafe由權(quán)限引擎和管理界面組成。權(quán)限引擎解析權(quán)限策略;管理界面生成、維護(hù)權(quán)限策略。如圖示:

           

           

          注:ralasafe團(tuán)隊(duì)博客在javaeye/baidu/blogjava等空間,同步發(fā)布。ralasafe官方網(wǎng)站:http://www.ralasafe.org/zh

           

           

           

          posted @ 2010-09-08 21:38 細(xì)粒度權(quán)限管理 閱讀(4836) | 評(píng)論 (1)編輯 收藏

          -------------------------------------------- 總大綱 ---------------------------------

          Ralasafe開(kāi)源有段時(shí)間了,大約有2個(gè)月了。根據(jù)社區(qū)的反饋,我打算圍繞Ralasafe最佳實(shí)踐,書(shū)寫(xiě)一系列BLOG。


          大體內(nèi)容有:

          1, 登錄控制: 哪些頁(yè)面需要登錄后才能訪(fǎng)問(wèn),登錄用戶(hù)名、密碼驗(yàn)證,登錄轉(zhuǎn)向頁(yè)面;

          2, URL權(quán)限控制:哪些頁(yè)面訪(fǎng)問(wèn)需要進(jìn)行角色權(quán)限驗(yàn)證,怎樣驗(yàn)證最簡(jiǎn)單有效,如何處理驗(yàn)證失敗情況;

          3, 數(shù)據(jù)級(jí)權(quán)限管理方案探討:選擇中間件呢還是框架?

          4, Ralasafe體系結(jié)構(gòu): 用戶(hù)怎么讀取,用戶(hù)有哪些字段,怎樣與應(yīng)用基礎(chǔ);

          5, 數(shù)據(jù)級(jí)查詢(xún)權(quán)限管理: 如何給不同的人分配不同的查詢(xún)數(shù)據(jù)權(quán)限,返回where條件呢,還是直接返回結(jié)果集?

          6, 數(shù)據(jù)級(jí)決策權(quán)限管理: 如何給不同的人分配不同的數(shù)據(jù)操作權(quán)限,當(dāng)用戶(hù)不具備權(quán)限怎么辦?

          7, 其他細(xì)小的權(quán)限控制: 如下拉框顯示內(nèi)容;按鈕、鏈接是否顯示,圖片是否顯示等。

          -------------------------------------------- ------- --------------------------------


          數(shù)據(jù)級(jí)權(quán)限

          數(shù)據(jù)級(jí)權(quán)限,無(wú)外乎這些類(lèi)型:

          1,數(shù)據(jù)庫(kù)行列級(jí):比如領(lǐng)導(dǎo)查詢(xún)數(shù)據(jù)范圍和普通員工查詢(xún)的數(shù)據(jù)范圍不同,客戶(hù)經(jīng)理能夠查詢(xún)客戶(hù)聯(lián)系方式字段,而其他人不能查看客戶(hù)聯(lián)系方式字段。

          2,字段內(nèi)容控制:比如普通審查員審查50w以下財(cái)務(wù)數(shù)據(jù),剛?cè)肼毧蛻?hù)經(jīng)理只能將客戶(hù)級(jí)別調(diào)整不能超過(guò)3級(jí)。


          從用戶(hù)與數(shù)據(jù)的交互方向可以分為2大類(lèi):

          1,從系統(tǒng)獲取數(shù)據(jù)(查詢(xún));

          2,向系統(tǒng)提交數(shù)據(jù)之前的判斷。

          現(xiàn)實(shí)困惑

          這種權(quán)限與業(yè)務(wù)緊密耦合,很難找到通用方法。絕大部分系統(tǒng)仍然采用if/else來(lái)編程,而且這種邏輯分散到系統(tǒng)的各個(gè)環(huán)節(jié),甚至還會(huì)在系統(tǒng)多處出現(xiàn)重復(fù)判斷。

          也有不少網(wǎng)友嘗試5表模型等,試圖通過(guò)數(shù)據(jù)模型構(gòu)造好的ACCESS CONTROL LIST來(lái)控制。這種構(gòu)造ENTRY模式,當(dāng)數(shù)據(jù)量小的時(shí)候,是可行的,維護(hù)工作量也不大。當(dāng)數(shù)據(jù)量大的時(shí)候,顯然不能奏效。甚至無(wú)法運(yùn)行,維護(hù)工作量非常大。

          主要表現(xiàn)在:

          1,where 語(yǔ)句里面的in(..., ..., ..., ..., ...) 子條件過(guò)長(zhǎng),或者使用in (select ... from ACL_ENTRY where ... )性能也是非常低下的;

          2,當(dāng)刪除某用戶(hù)的時(shí)候,需要在A(yíng)CL_ENTRY表里面,刪除相關(guān)記錄;

          3,當(dāng)刪除某業(yè)務(wù)數(shù)據(jù)的時(shí)候,也需要在A(yíng)CL_ENTRY表里面,刪除掉相關(guān)記錄;

          4,數(shù)據(jù)量大,ACL_ENTRY數(shù)據(jù)量承幾何級(jí)增長(zhǎng)。


          也有企業(yè)嘗試使用規(guī)則引擎來(lái)解決。這是非常好的嘗試,提升了系統(tǒng)開(kāi)發(fā)效率、組件復(fù)用率。

          主要表現(xiàn)在:

          1,首先,主動(dòng)的實(shí)踐了一項(xiàng)最佳項(xiàng)目實(shí)踐:權(quán)限與業(yè)務(wù)松耦合。

          2,通過(guò)松耦合,大幅優(yōu)化了系統(tǒng)結(jié)構(gòu)。

          3,進(jìn)一步提高了組件復(fù)用率。

          只是,規(guī)則引擎畢竟不是專(zhuān)業(yè)于權(quán)限管理領(lǐng)域,對(duì)于復(fù)雜需求,或者有些需求實(shí)現(xiàn)起來(lái)還是很別扭。看起來(lái)像if/else的規(guī)則表達(dá)罷了。


          Ralasafe和IBM、Oracle商業(yè)產(chǎn)品一樣,都使用規(guī)則進(jìn)行描述。大家的區(qū)別在于:誰(shuí)滿(mǎn)足需求更多、更容易了。

          框架or中間件

          框架的好處,顯然是有個(gè)體系結(jié)構(gòu),團(tuán)隊(duì)遵循該方式進(jìn)行開(kāi)發(fā)、組裝即可。提供了一種標(biāo)準(zhǔn)和開(kāi)發(fā)模式。

          中間件的好處,顯然是提供了自由,而且易于結(jié)合、易于分工。提供了一種服務(wù)方式。


          我本人希望自由,所以討厭框架,偏愛(ài)中間件。但我對(duì)選用中間件、框架的選擇標(biāo)準(zhǔn)是非常中肯的,供大家參考。

          在系統(tǒng)結(jié)構(gòu)分層的場(chǎng)景,適合使用框架。
          在系統(tǒng)功能分離的場(chǎng)景,適合使用中間件。

          那么具體到權(quán)限管理領(lǐng)域,顯然是功能分離,中間件更合適。這么做,還將不給原有系統(tǒng)、新開(kāi)發(fā)系統(tǒng)的既定框架造成沖突。一個(gè)系統(tǒng)里面使用多個(gè)框架,是非常痛苦的事情。殊不知在SSH的海洋里面,有多少人將N多時(shí)間“Kill”在沙灘上?!

          Ralasafe體系結(jié)構(gòu)及應(yīng)用集成

          Ralasafe是中間件,采用服務(wù)模型。在業(yè)務(wù)需要的地方,調(diào)用Ralasafe接口,或者將Ralasafe接口向LOG4J那樣wrap到你的aspect里面去。


          Ralasafe按照權(quán)限的方向,提供2種數(shù)據(jù)級(jí)權(quán)限管理服務(wù),也正好對(duì)應(yīng)2個(gè)接口:

          1,從系統(tǒng)獲取數(shù)據(jù), Ralasafe.query( int privilegeId, User user, CustomizedWhere where, int fromIndex, int size );

          2,向系統(tǒng)提交數(shù)據(jù)之前的判斷,Ralasafe.permit( int privilegeId, User user, Object businessData);

          Ralasafe還針對(duì)web應(yīng)用,提供了WebRalasafe


          接口非常簡(jiǎn)單,在接口層只要告知Ralasafe:當(dāng)前這個(gè)是誰(shuí),他/她想干什么。

          權(quán)限邏輯,全部在Ralasafe圖形化管理界面,點(diǎn)擊鼠標(biāo)完成配置,并進(jìn)行在線(xiàn)測(cè)試。無(wú)需編程。

          所以,使用Ralasafe編程工作量非常少。也給不少開(kāi)發(fā)人員造成“不知道怎樣與應(yīng)用集成”的錯(cuò)覺(jué)。

          Ralasafe的用戶(hù)怎么來(lái)

          Ralasafe并不會(huì)給你的應(yīng)用系統(tǒng)“假定”有哪些字段。你的應(yīng)用系統(tǒng)用戶(hù)可以由任意字段,通過(guò)XML文件安裝到Ralasafe即可。該XML文件,主要指明:用戶(hù)存在那張表(也可以是視圖,這樣可以從多張表關(guān)聯(lián)讀取數(shù)據(jù)。比如ralasafe-demo,就關(guān)聯(lián)到company表讀取了companyLevel和companyName字段); 哪些字段是唯一字段; 哪些字段是主鍵;各字段對(duì)應(yīng)類(lèi)型。


          然后,在所有權(quán)限規(guī)則里面,可以讀取這些用戶(hù)字段。比如ralasafe-demo應(yīng)用(下載地址:

          http://www.ralasafe.org/zh/download/download.jsp ) 用戶(hù)含有companyLevel字段,在定制“總公司”用戶(hù)分類(lèi)的時(shí)候,就將該用戶(hù)companyLevel字段與總公司級(jí)別“1”進(jìn)行比較。


          (下期真正開(kāi)始探討數(shù)據(jù)級(jí)權(quán)限管理實(shí)現(xiàn)了)


          注:ralasafe團(tuán)隊(duì)博客在javaeye/baidu/blogjava等空間,同步發(fā)布。ralasafe官方網(wǎng)站:http://www.ralasafe.org/zh



          posted @ 2010-09-06 22:58 細(xì)粒度權(quán)限管理 閱讀(2071) | 評(píng)論 (0)編輯 收藏
          -------------------------------------------- 總大綱 ---------------------------------
          Ralasafe開(kāi)源有段時(shí)間了,大約有2個(gè)月了。根據(jù)社區(qū)的反饋,我打算圍繞Ralasafe最佳實(shí)踐,書(shū)寫(xiě)一系列BLOG。

          大體內(nèi)容有:
          1, 登錄控制: 哪些頁(yè)面需要登錄后才能訪(fǎng)問(wèn),登錄用戶(hù)名、密碼驗(yàn)證,登錄轉(zhuǎn)向頁(yè)面;
          2, URL權(quán)限控制:哪些頁(yè)面訪(fǎng)問(wèn)需要進(jìn)行角色權(quán)限驗(yàn)證,怎樣驗(yàn)證最簡(jiǎn)單有效,如何處理驗(yàn)證失敗情況;
          3, 數(shù)據(jù)級(jí)權(quán)限管理方案探討:選擇中間件呢還是框架?
          4, Ralasafe體系結(jié)構(gòu): 用戶(hù)怎么讀取,用戶(hù)有哪些字段,怎樣與應(yīng)用基礎(chǔ);
          5, 數(shù)據(jù)級(jí)查詢(xún)權(quán)限管理: 如何給不同的人分配不同的查詢(xún)數(shù)據(jù)權(quán)限,返回where條件呢,還是直接返回結(jié)果集?
          6, 數(shù)據(jù)級(jí)決策權(quán)限管理: 如何給不同的人分配不同的數(shù)據(jù)操作權(quán)限,當(dāng)用戶(hù)不具備權(quán)限怎么辦?
          7, 其他細(xì)小的權(quán)限控制: 如下拉框顯示內(nèi)容;按鈕、鏈接是否顯示,圖片是否顯示等。
          -------------------------------------------- ------- --------------------------------

          今天說(shuō)的URL權(quán)限控制,內(nèi)容主要有:URL權(quán)限控制,當(dāng)用戶(hù)訪(fǎng)問(wèn)某URL時(shí),進(jìn)行角色權(quán)限驗(yàn)證。如果有相應(yīng)權(quán)限,則允許其正常訪(fǎng)問(wèn);否則,轉(zhuǎn)到拒絕頁(yè)面。
          我們依然通過(guò)一個(gè)Filter來(lái)實(shí)現(xiàn),這樣就無(wú)需在代碼中增加權(quán)限判斷,也無(wú)需套用任何框架。對(duì)于整個(gè)權(quán)限管理系統(tǒng)來(lái)說(shuō),本節(jié)內(nèi)容也非常簡(jiǎn)單。

          理論分析

          當(dāng)軟件實(shí)施人員進(jìn)行系統(tǒng)實(shí)施的時(shí)候,會(huì)將一些訪(fǎng)問(wèn)菜單定義為權(quán)限。然后定義角色,讓角色擁有權(quán)限。然后再將權(quán)限賦給用戶(hù)。
          所以,當(dāng)用戶(hù)請(qǐng)求某個(gè)URL的時(shí)候,要不該URL需要權(quán)限驗(yàn)證,要不就是不需要權(quán)限驗(yàn)證。
          檢驗(yàn)標(biāo)準(zhǔn)就是:看權(quán)限表里面有沒(méi)有該URL。檢驗(yàn)的時(shí)候,唯一需要注意的是:URL參數(shù),比如employeeManage?op=add。

          數(shù)據(jù)庫(kù)模型

          權(quán)限表:id<int>,name<varchar>,url<varchar>,description<varchar>   | pk(id)
          角色表:id<int>,name<varchar>,description<varchar>                        | pk(id)
          角色-權(quán)限關(guān)系表:roleId<int>,privilegeId<int>                                       | pk(roleId,privilegeId)
          用戶(hù)-角色關(guān)系表:userId<int>(根據(jù)你系統(tǒng)的情況,也可能是varchar等),roleId<int> | pk(userId,roleId)

          Ralasafe方案

          Ralasafe權(quán)限管理中間件(下載地址),既可以管理和控制功能級(jí)權(quán)限,也可以管理和控制數(shù)據(jù)級(jí)權(quán)限。開(kāi)發(fā)者還可以根據(jù)需求,只選擇功能級(jí)控制,或者只選擇數(shù)據(jù)級(jí)控制。

          當(dāng)安裝好用戶(hù)元數(shù)據(jù)的時(shí)候,Ralasafe自動(dòng)創(chuàng)建所有權(quán)限表。相關(guān)權(quán)限數(shù)據(jù),都由Ralasafe界面進(jìn)行管理(即錄入)。

          Ralasafe的管理界面,在功能權(quán)限方面可以做到:
          1,管理權(quán)限界面;
          2,管理角色界面,并給角色賦權(quán)限;
          3,給用戶(hù)分配角色界面。這里還需要注意:不同用戶(hù)管理可以給不同范圍的用戶(hù)分配角色。比如:總公司的管理員可以給所有人分配角色;分公司管理員可以給本分公司及下屬子公司用戶(hù)分配角色。

          Ralasafe將最后一點(diǎn)視為數(shù)據(jù)級(jí)權(quán)限。詳見(jiàn):http://www.ralasafe.org/zh/guide/reference/safe.html#ralasafehttp://www.ralasafe.org/jforum/posts/list/11.page


          org.ralasafe.webFilter.UrlAclFilter配置到web.xml即可,而且配置工作量極其少。
          <filter>
              
          <filter-name>ralasafe/UrlAclFilter</filter-name>
              
          <filter-class>org.ralasafe.webFilter.UrlAclFilter</filter-class>
              
          <init-param>
                  
          <param-name>loginPage</param-name>
                  
          <param-value>/ralasafe/demo/login.jsp</param-value>
              
          </init-param>
              
          <init-param>
                  
          <param-name>denyPage</param-name>
                  
          <param-value>/ralasafe/demo/noPrivilege.jsp</param-value>
              
          </init-param>
          </filter>
          <filter-mapping>
              
          <filter-name>ralasafe/UrlAclFilter</filter-name>
              
          <url-pattern>/ralasafe/demo/*</url-pattern>
          </filter-mapping>

           
          該Filter具有這些功能:
          1,在用戶(hù)具有權(quán)限的時(shí)候,正常訪(fǎng)問(wèn);
          2,在用戶(hù)不具有權(quán)限的時(shí)候,轉(zhuǎn)到拒絕頁(yè)面;
          3,如果用戶(hù)沒(méi)用登錄,轉(zhuǎn)到登錄頁(yè)面,讓用戶(hù)先登錄。

          其他

          這里我簡(jiǎn)單說(shuō)說(shuō)spring security。
          spring security在控制功能權(quán)限的時(shí)候,還會(huì)幫助開(kāi)發(fā)人員控制Dao/Service等組件。我個(gè)人認(rèn)為這種控制是多余的。
          因?yàn)椋δ軝?quán)限控制應(yīng)該站在最終用戶(hù)角度進(jìn)行考慮。Dao/Service等編程開(kāi)發(fā)級(jí)的組件,并不是最終用戶(hù)關(guān)心的事情。所以無(wú)需進(jìn)行功能權(quán)限控制。
          另外,大家在使用spring security,我建議將功能級(jí)權(quán)限控制放在數(shù)據(jù)庫(kù)里面,而不是annotation到j(luò)ava code里面。因?yàn)閍nnotation到j(luò)ava code里面,最終用戶(hù)就不能控制了。

          注:ralasafe團(tuán)隊(duì)博客在javaeye/baidu/blogjava等空間,同步發(fā)布。ralasafe官方網(wǎng)站:http://www.ralasafe.org/zh


          posted @ 2010-09-02 21:55 細(xì)粒度權(quán)限管理 閱讀(2596) | 評(píng)論 (0)編輯 收藏
          原文:http://www.ralasafe.org/jforum/posts/list/66.page
          Ralasafe自從2010年6月23日開(kāi)源以來(lái),得到廣大網(wǎng)友的支持和鼓勵(lì),在此非常感謝。Ralasafe團(tuán)隊(duì)也通過(guò)網(wǎng)站、論壇、博客、Email、QQ等各種方式與社區(qū)互動(dòng),形成交流。根據(jù)這段時(shí)間的社區(qū)維護(hù)情況,我們制定如下社區(qū)維護(hù)原則。

          我們歡迎這樣的人,樂(lè)于回答他們的問(wèn)題:
          1,說(shuō)話(huà)友好,平等切磋的人;
          2,勤于學(xué)習(xí),而不論技術(shù)高低,不論新手老手。即便你是新手,但只要你肯予學(xué)習(xí),不斷交流,我們樂(lè)于提供幫助;
          3,帶有個(gè)人偏見(jiàn),但言之有物的人。

          我們不歡迎這樣的人,也不想回答他們的問(wèn)題:
          1,出言不遜,帶有蔑視或者侮辱性語(yǔ)言的人;
          2,懶惰的人,尤其是沒(méi)有看文檔,沒(méi)有對(duì)Ralasafe-demo進(jìn)行揣摩,沒(méi)有進(jìn)行基本學(xué)習(xí)的人;(文檔沒(méi)有看懂的人例外,確實(shí)我們可能撰寫(xiě)方式有問(wèn)題,個(gè)人理解力有差距等)
          3,帶有個(gè)人偏見(jiàn),且言之無(wú)物的人。

          Ralasafe團(tuán)隊(duì)將繼續(xù)保持開(kāi)源,并致力于社區(qū)維護(hù)工作。對(duì)于新手,只要樂(lè)于學(xué)習(xí),我們甚至?xí)?duì)學(xué)習(xí)難點(diǎn),免費(fèi)提供QQ遠(yuǎn)程協(xié)助。
          posted @ 2010-09-02 15:04 細(xì)粒度權(quán)限管理 閱讀(463) | 評(píng)論 (0)編輯 收藏
               摘要: Ralasafe是基于MIT協(xié)議開(kāi)源的,數(shù)據(jù)級(jí)權(quán)限管理中間件。開(kāi)源有2個(gè)月了。根據(jù)社區(qū)的反饋,我圍繞Ralasafe最佳實(shí)踐,書(shū)寫(xiě)一系列BLOG。今天說(shuō)的登錄控制,內(nèi)容主要有:哪些頁(yè)面需要登錄控制、登錄驗(yàn)證邏輯、登錄后頁(yè)面轉(zhuǎn)向哪里,以及權(quán)限菜單等問(wèn)題。雖然本系列講解權(quán)限管理,尤其是數(shù)據(jù)級(jí)權(quán)限管理。但嚴(yán)格意義來(lái)說(shuō),登錄控制,并不屬于權(quán)限管理內(nèi)容。它屬于用戶(hù)身份認(rèn)證內(nèi)容。權(quán)限基本都與用戶(hù)相關(guān),用戶(hù)首先就涉及到用戶(hù)名密碼驗(yàn)證。所以我們從這里開(kāi)始說(shuō)起。  閱讀全文
          posted @ 2010-09-01 19:41 細(xì)粒度權(quán)限管理 閱讀(3721) | 評(píng)論 (2)編輯 收藏
               摘要: 很多系統(tǒng)對(duì)于黑客不堪一擊。請(qǐng)看這樣的示例:
          1. 前臺(tái)展現(xiàn)客戶(hù)能查看的客戶(hù)數(shù)據(jù),而且用戶(hù)能刪除的客戶(hù)數(shù)據(jù),就是前臺(tái)展現(xiàn)出來(lái)的數(shù)據(jù);
          2. 當(dāng)用戶(hù)選擇某個(gè)用戶(hù),點(diǎn)擊刪除按鈕,后臺(tái)執(zhí)行刪除操作。
          比如,請(qǐng)求后臺(tái)刪除的url是:http://www.test.com/crm/customer.do?id=3
          假設(shè),id=13的客戶(hù)在前臺(tái)不顯示(因?yàn)楫?dāng)前用戶(hù)沒(méi)有對(duì)該客戶(hù)數(shù)據(jù)有刪除權(quán)限),但用戶(hù)輸入http://www.test.com/crm/customer.do?id=13 顯然id=13的客戶(hù)將被刪除掉。

          有開(kāi)發(fā)者建議采用id值不要使用自增長(zhǎng)型,而改用其他型,比如hashcode等。這也不大合適,可以使用爬蟲(chóng)輕松地將漏洞爬出來(lái)。

          顯然,僅僅通過(guò)界面層次控制數(shù)據(jù)級(jí)權(quán)限是不夠的。  閱讀全文
          posted @ 2009-06-23 09:55 細(xì)粒度權(quán)限管理 閱讀(3484) | 評(píng)論 (3)編輯 收藏
          主站蜘蛛池模板: 湘乡市| 小金县| 景东| 丹棱县| 正蓝旗| 佛坪县| 南川市| 建宁县| 久治县| 宿迁市| 广宁县| 团风县| 安丘市| 鄂伦春自治旗| 靖西县| 沐川县| 社旗县| 宜昌市| 吉安市| 建湖县| 巨鹿县| 宣化县| 彭山县| 铁岭县| 宁河县| 扎赉特旗| 南宁市| 中牟县| 乾安县| 武夷山市| 通许县| 奇台县| 沂南县| 鲜城| 迭部县| 沙田区| 曲周县| 泗洪县| 凌源市| 阿鲁科尔沁旗| 贵港市|