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