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

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

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

    差沙的密碼 -- SSHWSFC's code
    閱讀本Blog請自備塑料袋一只
    posts - 14,  comments - 59,  trackbacks - 0
    Acegi好早就實現了ACL(好像是0.5),但是使用起來確實有點麻煩,所以用的不是太廣泛。這里簡單的說明一下使用方法,希望有更多的朋友來試試。

    首先要理解Acegi里面Voter的概念,ACL正是在一個Voter上擴展起來的。現來看一下AclVoter的配置。

    ????<bean?id="aclBeanReadVoter"?class="org.acegisecurity.vote.BasicAclEntryVoter">
    ????????
    <property?name="processConfigAttribute">
    ????????????
    <value>ACL_READ</value>
    ????????
    </property>
    ????????
    <property?name="processDomainObjectClass">
    ????????????
    <value>org.springside.modules.security.acl.domain.AclDomainAware</value>
    ????????
    </property>
    ????????
    <property?name="aclManager">
    ????????????
    <ref?local="aclManager"/>
    ????????
    </property>
    ????????
    <property?name="requirePermission">
    ????????????
    <list>
    ????????????????
    <ref?local="org.acegisecurity.acl.basic.SimpleAclEntry.ADMINISTRATION"/>
    ????????????????
    <ref?local="org.acegisecurity.acl.basic.SimpleAclEntry.READ"/>
    ????????????
    </list>
    ????????
    </property>
    ????
    </bean>
    1. ACL_READ指的是這個Voter對哪些SecurityConfig起作用,我們可以把ACL_READ配置在想要攔截的Method上。比方說我們要攔截readOrder這個方法,以實現ACL控制,可以這樣配置。
      orderManager.readOrder=ACL_READ
    2. processDomainObjectClass指出哪些DomainObject是要進行ACL校驗的。
    3. aclManager是一個比較重要的概念,主要負責在權限列表中根據用戶和DomainObject取得acl列表。
    4. requirePermission指出要進行這個操作必須具備的acl權限,比方說read操作就必須有ADMINISTRATION或READ兩個權限。

    其實整個過程看下來比較清晰,下面來看一下AclManager如何配置。

    ????<!--?=========?ACCESS?CONTROL?LIST?LOOKUP?MANAGER?DEFINITIONS?=========?-->

    ????
    <bean?id="aclManager"?class="org.acegisecurity.acl.AclProviderManager">
    ????????
    <property?name="providers">
    ????????????
    <list>
    ????????????????
    <ref?local="basicAclProvider"/>
    ????????????
    </list>
    ????????
    </property>
    ????
    </bean>

    ????
    <bean?id="basicAclProvider"?class="org.acegisecurity.acl.basic.BasicAclProvider">
    ????????
    <property?name="basicAclDao">
    ????????????
    <ref?local="basicAclExtendedDao"/>
    ????????
    </property>
    ????
    </bean>

    ????
    <bean?id="basicAclExtendedDao"?class="org.acegisecurity.acl.basic.jdbc.JdbcExtendedDaoImpl">
    ????????
    <property?name="dataSource">
    ????????????
    <ref?bean="dataSource"/>
    ????????
    </property>
    ????
    </bean>

    很明顯ACLManager繼承了Acegi的一貫風格,Provider可以提供多種取得ACL訪問列表的途徑,默認的是用basicAclProvider在數據庫中取得。既然提到了數據庫,那我們就來看一下Acegi默認提供的ACL在數據庫里的保存表結構:

    CREATE?TABLE?acl_object_identity?(
    id?
    IDENTITY?NOT?NULL,
    object_identity?VARCHAR_IGNORECASE(
    250)?NOT?NULL,
    parent_object?
    INTEGER,
    acl_class?VARCHAR_IGNORECASE(
    250)?NOT?NULL,
    CONSTRAINT?unique_object_identity?UNIQUE(object_identity),
    FOREIGN?KEY?(parent_object)?REFERENCES?acl_object_identity(id)
    );
    CREATE?TABLE?acl_permission?(
    id?
    IDENTITY?NOT?NULL,
    acl_object_identity?
    INTEGER?NOT?NULL,
    recipient?VARCHAR_IGNORECASE(
    100)?NOT?NULL,
    mask?
    INTEGER?NOT?NULL,
    CONSTRAINT?unique_recipient?UNIQUE(acl_object_identity,?recipient),
    FOREIGN?KEY?(acl_object_identity)?REFERENCES?acl_object_identity(id)
    );
    1. acl_object_identity表存放了所有受保護的domainObject的信息。其中object_identity字段保存了domainObject的class和id,默認的保存格式是:domainClass:domainObjectId。
    2. acl_permission?就是ACL權限列表了,recipient?是用戶或角色信息,mask表示了這個用戶或角色對這個domainObject的訪問權限。注意這些信息的保存格式都是可以根據自己的需要改變的。

    這樣讀取和刪除的時候Acegi就能很好的完成攔截工作,但是讀取一個List的時候,如何才能把該用戶不能操作的domainObject剔除掉呢?這就需要afterInvocationManager來完成這個工作。下面來看下配置:

    ????<!--?==============?"AFTER?INTERCEPTION"?AUTHORIZATION?DEFINITIONS?===========?-->

    ????
    <bean?id="afterInvocationManager"?class="org.acegisecurity.afterinvocation.AfterInvocationProviderManager">
    ????????
    <property?name="providers">
    ????????????
    <list>
    ????????????????
    <ref?local="afterAclCollectionRead"/>
    ????????????
    </list>
    ????????
    </property>
    ????
    </bean>
    ????
    <!--?Processes?AFTER_ACL_COLLECTION_READ?configuration?settings?-->
    ????
    <bean?id="afterAclCollectionRead"?class="org.acegisecurity.afterinvocation.BasicAclEntryAfterInvocationCollectionFilteringProvider">
    ????????
    <property?name="aclManager">
    ????????????
    <ref?local="aclManager"/>
    ????????
    </property>
    ????????
    <property?name="requirePermission">
    ????????????
    <list>
    ????????????????
    <ref?local="org.acegisecurity.acl.basic.SimpleAclEntry.ADMINISTRATION"/>
    ????????????????
    <ref?local="org.acegisecurity.acl.basic.SimpleAclEntry.READ"/>
    ????????????
    </list>
    ????????
    </property>
    ????
    </bean>

    afterAclCollectionRead會在攔截的方法執行結束的時候執行。主要的作用就是在返回的List中挨個檢查domainObject的操作權限,然后根據requirePermission來剔除不符合的domainObject。
    posted on 2006-06-17 00:20 差沙 閱讀(2276) 評論(4)  編輯  收藏 所屬分類: avaj

    FeedBack:
    # re: 在Acegi中使用ACL
    2006-07-05 10:48 | acegi
    你好,能不能寫的詳細點,如把你的訂單管理的acl寫出來,謝謝  回復  更多評論
      
    # re: 在Acegi中使用ACL
    2006-07-05 10:49 | acegi
    有點地方不明白,能請教你嗎  回復  更多評論
      
    # re: 在Acegi中使用ACL
    2006-07-18 15:27 | acegi
    想請教個問題,可否  回復  更多評論
      
    # re: 在Acegi中使用ACL[未登錄]
    2008-01-17 14:12 | 白菜
    請問文中的
    ACL_READ指的是這個Voter對哪些SecurityConfig起作用,我們可以把ACL_READ配置在想要攔截的Method上。比方說我們要攔截readOrder這個方法,以實現ACL控制,可以這樣配置。
    orderManager.readOrder=ACL_READ
    orderManager.readOrder=ACL_READ是在哪里配置的?能說的詳細點嗎?  回復  更多評論
      
    這家伙很懶,但起碼還是寫了一句話。

    <2006年6月>
    28293031123
    45678910
    11121314151617
    18192021222324
    2526272829301
    2345678

    常用鏈接

    留言簿(8)

    隨筆分類

    隨筆檔案

    文章分類

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 成人午夜免费视频| 国产成人精品久久亚洲高清不卡| 精品国产免费人成网站| 亚洲精品无码日韩国产不卡?V| 美女免费视频一区二区三区| 国产成人一区二区三区免费视频 | 亚洲国产高清精品线久久| 久久人午夜亚洲精品无码区| 国产男女猛烈无遮挡免费网站 | 美国毛片亚洲社区在线观看| 国产一区二区三区在线免费| 免费国产va在线观看| 国产亚洲精品久久久久秋霞| 国产一区二区三区免费| 噜噜噜亚洲色成人网站∨| 在线看片免费不卡人成视频| WWW国产亚洲精品久久麻豆| 亚洲日韩精品无码专区网站| a级毛片毛片免费观看永久| 亚洲日韩乱码中文无码蜜桃| 四虎免费大片aⅴ入口| 一级黄色免费毛片| 久久久久亚洲AV无码观看| 在线jlzzjlzz免费播放| 三级黄色片免费看| 亚洲中文字幕久在线| 午夜亚洲av永久无码精品| 波多野结衣免费一区视频| 亚洲一区二区三区在线观看蜜桃| 手机看片久久国产免费| a视频免费在线观看| 久久久久亚洲国产| 国产亚洲?V无码?V男人的天堂 | 亚洲M码 欧洲S码SSS222| 久久久精品免费视频| 亚洲国产成人久久精品大牛影视| 狠狠亚洲婷婷综合色香五月排名| 91麻豆最新在线人成免费观看| 特级毛片在线大全免费播放| 久久精品国产亚洲AV香蕉| 免费一级成人毛片|