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

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

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

    隨筆-295  評論-26  文章-1  trackbacks-0

    四?Acegi ACL使用?

    4.1 基本概念

    ????? 在google中搜索'acl'會找到很多相關的介紹,而且涉及的范圍也特別廣泛。ACL是(Access Control List)的縮寫,顧名思義,ACL是‘訪問控制列表’的意思。通俗點說,ACL保存了所有用戶或角色對資源的訪問權限。最典型的ACL實現是流行操作系統(window, unix)的文件訪問控制系統,精確定義了某個用戶或角色對某個特定文件的讀、寫、執行等權限,更通俗的例子是可以定義某個管理員只能管一部分的訂單,而另一個管理員只能管另一部分的。

    4.2 Acegi ACL配置

    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。

    4.3 使用RuleEngine設置的ACL規則

    在SpringSide里使用了RuleEngine來設置ACL規則,具體規則見
    bookstore-sample\resources\rules\drl



    大盤預測 國富論
    posted on 2007-09-12 14:46 華夢行 閱讀(284) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲精品字幕在线观看| 四虎在线播放免费永久视频| 亚洲av之男人的天堂网站| 久久精品成人免费国产片小草| 国产成人aaa在线视频免费观看| 亚洲精华国产精华精华液好用| 最近中文字幕无吗免费高清| 亚洲日韩精品国产一区二区三区| 国产成人免费高清激情视频| 亚洲免费福利在线视频| 日本三级2019在线观看免费| 亚洲真人无码永久在线观看| 国产一级淫片a免费播放口之 | 黄页免费视频播放在线播放| 亚洲?V无码乱码国产精品| 又硬又粗又长又爽免费看| 亚洲色婷婷综合久久| 午夜免费福利小电影| 亚洲欧洲精品一区二区三区| 成年女人看片免费视频播放器| 亚洲AV无码一区二区大桥未久| 亚洲色偷拍区另类无码专区| 拍拍拍无挡免费视频网站| 91精品国产亚洲爽啪在线观看| 久久久久久久久免费看无码| 无码一区二区三区亚洲人妻| 亚洲精品国产品国语在线| 4444www免费看| 免费观看亚洲人成网站| 亚洲精品乱码久久久久久按摩| 国产麻豆视频免费观看| 免费人成视频在线观看免费| 亚洲好看的理论片电影| 精品国产麻豆免费网站| 国产一级在线免费观看| 天天爽亚洲中文字幕| 中国亚洲女人69内射少妇| av无码免费一区二区三区| 污污的视频在线免费观看| 亚洲无限乱码一二三四区| 亚洲精品一级无码鲁丝片|