Acegi實現(xiàn)對象實例級權(quán)限控制的方法
一直以來對于Acegi實現(xiàn)Domain Object Instance的權(quán)限控制就比較感興趣,今天抽空大致的看了一下,感覺和我以前提出的數(shù)據(jù)權(quán)限那部分的實現(xiàn)是大致相同的。
Acegi在Domain Object Instance上采用的是ACL的實現(xiàn),ACL在實現(xiàn)實例級別的權(quán)限控制上確實是非常好的方法,按照ACL的思想我們很容易知道Domain Object Instance的控制需要的是user--->Domain Object Instance的一個列表的維護(hù),這點在Acegi上可以看到采用的就是通過acl_object_identity以及acl_permission這兩張表來實現(xiàn)的,看acl_object_identity表驚喜的發(fā)現(xiàn)acegi也是考慮到了domain object instance的權(quán)限繼承的實現(xiàn)的,acl_object_identity記錄的是需要控制權(quán)限的domain object instance的相關(guān)信息,acl_permission記錄的即為用戶對于domain object instance的權(quán)限,Acegi做到的其實就是將這些通用的部分做了一個實現(xiàn),在存儲domain object時它幫忙做了相關(guān)的權(quán)限信息的存儲,應(yīng)該說acegi這樣的實現(xiàn)確實是可以做到domain object instance的權(quán)限控制,不過感覺在acegi中要去實現(xiàn)對象實例級權(quán)限控制還是不那么的方便,配置起來非常的繁瑣,應(yīng)該基于它做一級提升,在易用性方面。
而且這種做法在侵入性上仍然是無法避免的,比如需要分頁獲取數(shù)據(jù)時,必然是要在現(xiàn)在的Dao層次做一個侵入的,盡管這點經(jīng)過一定的方法(Template Pattern)是可以實現(xiàn)無侵入性的...
目前感覺在對象實例級別的權(quán)限控制上還是沒有非常好的方法...
曾經(jīng)考慮過是否可以采用AOP的weaver來實現(xiàn)...
還有就是在對象實例級別是否為權(quán)限控制還是業(yè)務(wù)規(guī)則定義方面是有一定的區(qū)分難度的,很多時候很難明白的去標(biāo)識哪個是數(shù)據(jù)權(quán)限、哪個是業(yè)務(wù)規(guī)則,感覺在這兩點上挺容易發(fā)生混淆的現(xiàn)象。
posted on 2006-02-13 15:38 BlueDavy 閱讀(3789) 評論(1) 編輯 收藏 所屬分類: Java 、系統(tǒng)設(shè)計