<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 193,  comments - 520,  trackbacks - 0

    數據權限分為兩種,一種是數據范圍權限,一種是具體到每一條數據的權限。前一種可以通過動態構建SQL解決;后一種
    似乎必須通過ACL不可。于是就想對Acegi ACL做一個通用的擴展。以通訊錄為例
    先看一個總的配置
    ? <bean id="contactManagerSecurityInterceptor" class="org.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor">
    ????? <property name="authenticationManager"><ref bean="authenticationManager"/></property>
    ????? <property name="accessDecisionManager"><ref local="aclDecisionManager"/></property>
    ????? <property name="afterInvocationManager"><ref local="afterInvocationManager"/></property>
    ????? <property name="objectDefinitionSource">
    ???????? <value>
    ??????????? com.ronghao.acltest.services.ContactService.saveContact=AFTER_ACL_CREAT
    ??????????? com.ronghao.acltest.services.ContactService.getAllContacts=AFTER_ACL_COLLECTION_READ
    ??????????? com.ronghao.acltest.services.ContactService.getContact=AFTER_ACL_READ
    ???????? </value>
    ????? </property>
    ?? </bean>
    擴展一、當你增加一條記錄的同時向ACL表里插入權限信息 這個SS已經做到了這一點
    ??ss有一個接口標示哪些doamin需要acl保護 AclDomainAware
    ??這里再擴展一個基類 ,目的很簡單當讀出數據時附加上權限信息
    ??public? class BasicAclDomain implements AclDomainAware {

    ??? private int mask; //權限

    ??? public int getMask() {
    ??????? return mask;
    ??? }

    ??? public void setMask(int mask) {
    ??????? this.mask = mask;
    ??? }
    ??}
    ??
    ??public class Contact extends BasicAclDomain
    擴展二、讀取列表時進行數據的過濾,原來的acegi在ACL的集合后處理會造成分頁產生虎牙子
    ???? 這里采用前攔截,在acl表里增加一個className字段,里面放上PO的類名,這樣可以縮小
    ???? 數據查詢范圍.實際在讀取集合時,是先到acl表里完成分頁,然后獲得對Contact的real id list
    ???? 然后攔截實際DAO方法,動態改變SQL成select * from real_data where id in ( {real id list} )的形式,這樣就OK了,
    ???? 分頁實際是對acl表里相應記錄的'分頁'.比如說取第10條到20條,實際是取acl表里相應記錄的第10條到20條來動態改變SQL
    ???? 這個可以寫一個專門被用來攔截的類 SecurityDAO 方法findByPageACL(query, page),ContactServiceImpl中getAllContacts
    ???? 方法強制調用該方法
    擴展三、后攔截。這里AFTER_ACL_COLLECTION_READ和AFTER_ACL_READ的目的就很簡單了,因為他們不再進行數據過 濾,?他們只是把用戶對每條記錄的mask取最大權限就OK,然后往PO里setMask。這樣PO帶了權限信息到頁面上就非常好處理了。比如button的顯示等等
    擴展四、封裝AclService,對單條記錄的ACL權限管理。比如增加權限、修改權限、刪除權限。這個acegi的最新1.0.3已經開始加入。
    具體在實現中感覺acl的vote完全是雞肋,全部不用。另外在擴展二中如果用戶數據要實現數據庫排序就比較困難。所以就有了還未實現的構想:
    一、PO創建向ACL表里插入權限信息時可以配置不同的策略:比如通訊錄創建一條新信息只能創建者可以看并管理,而你往請假表里插一條新信息后,不僅你了,你的上司也可以同時看到。(這個還是比較easy)
    二、用戶數據要實現數據庫排序。需要在ACL_OBJECT_IDENTITY里增加幾個額外的字段,把po相應的排序字段同步更新到ACL表中。什么?不好做?寫配置文件??!再對PO的update進行后攔截。
    想法就這樣。實現??



    http://m.tkk7.com/ronghao 榮浩原創,轉載請注明出處:)
    posted on 2006-12-14 10:20 ronghao 閱讀(4278) 評論(6)  編輯  收藏 所屬分類: 權限相關

    FeedBack:
    # re: 對Acegi ACL擴展的構想
    2006-12-15 10:29 | 差沙
    寫的不錯,有幾個疑問
    為什么ACL的Voter是雞肋呢,ACL完全是再一個Voter上發展起來的。

    你說的構想一,其實自己寫一個ACL規則就能實現,總體來說ACL這邊還是加上腳本引擎(當然要考慮性能問題)是最靈活的解決方案。

    還有你說的SQL層實現ACL攔截,前一陣子好像有人在做。  回復  更多評論
      
    # re: 對Acegi ACL擴展的構想
    2006-12-16 11:55 | ronghao
    純粹是個人看法,覺得ACL似乎并不需要acegi的前攔截,于是VOTE就作用不太大,另外是把mask給附加到PO的屬性里,這樣就更加覺得不需要了.
    關于構想一,我們可以針對不同的需求配置不同的AFTER_ACL_CREAT
    比如:AFTER_CONTACT_ACL_CREATE
    AFTER_MESSAGE_ACL_CREATE
    SQL層實現ACL攔截我已經有了一個粗糙的實現,就是有限制:即getAll時SQL必須是select * from table 后面不能帶條件,原因也很簡單:ACL表里沒有業務字段.所以這也是我著重考慮的問題:)  回復  更多評論
      
    # re: 對Acegi ACL擴展的構想
    2008-01-04 15:13 | 企業精英社區
    文中提到的ss是指什么呢?  回復  更多評論
      
    # re: 對Acegi ACL擴展的構想
    2008-01-17 15:17 | ronghao
    springside  回復  更多評論
      
    # re: 對Acegi ACL擴展的構想
    2008-03-20 17:40 | zhx

    因為是剛接觸,所以我想問下,是不是每個領域對象的實例在acl表里都要體現。如果要保護的領域對象多了的話 那么acl表里的數據量是不是會很大?  回復  更多評論
      
    # re: 對Acegi ACL擴展的構想
    2008-04-07 18:19 | ronghao
    @zhx
    是的,所以需要權衡。  回復  更多評論
      
    <2006年12月>
    262728293012
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    關注工作流和企業業務流程改進?,F就職于ThoughtWorks。新浪微博:http://weibo.com/ronghao100

    常用鏈接

    留言簿(38)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    常去的網站

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲午夜国产片在线观看| 免费看国产成年无码AV片| 亚洲一级片内射网站在线观看| mm1313亚洲国产精品无码试看| 成人男女网18免费视频| 亚洲精品无码mⅴ在线观看| 成年女人18级毛片毛片免费观看| 亚洲a级在线观看| 蜜桃视频在线观看免费网址入口| 亚洲va在线va天堂va手机| 好爽…又高潮了毛片免费看| 日韩成人精品日本亚洲| 亚洲片一区二区三区| 成人无码a级毛片免费| 亚洲2022国产成人精品无码区| 国产92成人精品视频免费| 精品国产日韩久久亚洲| 日本一区免费电影| 亚洲精品视频免费观看| 亚洲成年人在线观看| 在线看片韩国免费人成视频| 亚洲女子高潮不断爆白浆| 亚洲成AⅤ人影院在线观看| 免费无码H肉动漫在线观看麻豆 | 日产国产精品亚洲系列| 亚洲免费无码在线| 亚洲美女大bbbbbbbbb| 在线观看国产情趣免费视频 | 97在线视频免费| 亚洲午夜理论片在线观看| 亚洲国产日韩成人综合天堂| 久久精品视频免费| 亚洲乱码一区二区三区国产精品| 免费午夜爽爽爽WWW视频十八禁 | 最近的中文字幕大全免费版| 国产成人高清亚洲一区久久| 亚洲高清在线观看| 日本免费v片一二三区| 99视频精品全部免费观看| 亚洲日韩在线中文字幕综合| 亚洲AV无码欧洲AV无码网站|