<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

    數(shù)據(jù)權(quán)限分為兩種,一種是數(shù)據(jù)范圍權(quán)限,一種是具體到每一條數(shù)據(jù)的權(quán)限。前一種可以通過(guò)動(dòng)態(tài)構(gòu)建SQL解決;后一種
    似乎必須通過(guò)ACL不可。于是就想對(duì)Acegi ACL做一個(gè)通用的擴(kuò)展。以通訊錄為例
    先看一個(gè)總的配置
    ? <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>
    擴(kuò)展一、當(dāng)你增加一條記錄的同時(shí)向ACL表里插入權(quán)限信息 這個(gè)SS已經(jīng)做到了這一點(diǎn)
    ??ss有一個(gè)接口標(biāo)示哪些doamin需要acl保護(hù) AclDomainAware
    ??這里再擴(kuò)展一個(gè)基類 ,目的很簡(jiǎn)單當(dāng)讀出數(shù)據(jù)時(shí)附加上權(quán)限信息
    ??public? class BasicAclDomain implements AclDomainAware {

    ??? private int mask; //權(quán)限

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

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



    http://www.tkk7.com/ronghao 榮浩原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處:)
    posted on 2006-12-14 10:20 ronghao 閱讀(4278) 評(píng)論(6)  編輯  收藏 所屬分類: 權(quán)限相關(guān)

    FeedBack:
    # re: 對(duì)Acegi ACL擴(kuò)展的構(gòu)想
    2006-12-15 10:29 | 差沙
    寫的不錯(cuò),有幾個(gè)疑問(wèn)
    為什么ACL的Voter是雞肋呢,ACL完全是再一個(gè)Voter上發(fā)展起來(lái)的。

    你說(shuō)的構(gòu)想一,其實(shí)自己寫一個(gè)ACL規(guī)則就能實(shí)現(xiàn),總體來(lái)說(shuō)ACL這邊還是加上腳本引擎(當(dāng)然要考慮性能問(wèn)題)是最靈活的解決方案。

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

    因?yàn)槭莿偨佑|,所以我想問(wèn)下,是不是每個(gè)領(lǐng)域?qū)ο蟮膶?shí)例在acl表里都要體現(xiàn)。如果要保護(hù)的領(lǐng)域?qū)ο蠖嗔说脑?那么acl表里的數(shù)據(jù)量是不是會(huì)很大?  回復(fù)  更多評(píng)論
      
    # re: 對(duì)Acegi ACL擴(kuò)展的構(gòu)想
    2008-04-07 18:19 | ronghao
    @zhx
    是的,所以需要權(quán)衡。  回復(fù)  更多評(píng)論
      
    <2008年4月>
    303112345
    6789101112
    13141516171819
    20212223242526
    27282930123
    45678910

    關(guān)注工作流和企業(yè)業(yè)務(wù)流程改進(jìn)?,F(xiàn)就職于ThoughtWorks。新浪微博:http://weibo.com/ronghao100

    常用鏈接

    留言簿(38)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    常去的網(wǎng)站

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 日日噜噜噜噜夜夜爽亚洲精品| **俄罗斯毛片免费| 一个人免费观看www视频| 国产精品亚洲专区无码唯爱网 | 免费成人福利视频| 最近中文字幕国语免费完整| 亚洲欧洲免费视频| 日韩免费无码视频一区二区三区| 99视频在线精品免费| 18女人毛片水真多免费| 亚洲免费闲人蜜桃| 特级做A爰片毛片免费69| 天天干在线免费视频| 国产小视频在线免费| 亚洲高清最新av网站| 久久久久亚洲AV无码专区桃色 | 亚洲成在人线aⅴ免费毛片| 国产精品成人免费一区二区| 在线观看成人免费视频| 亚洲Av无码乱码在线znlu| 亚洲国产精品无码久久青草 | 免费看国产一级特黄aa大片| 亚洲成AⅤ人影院在线观看| 亚洲日产韩国一二三四区| 亚洲va中文字幕无码久久不卡| 亚洲国产另类久久久精品| 中文字幕亚洲综合久久2| 456亚洲人成在线播放网站| 色欲色欲天天天www亚洲伊| 日本一区二区在线免费观看 | 亚洲精品9999久久久久无码| 老司机精品视频免费| 精品免费久久久久国产一区| 亚洲免费精彩视频在线观看| 日韩精品无码区免费专区| 免费一区二区三区四区五区 | 成年女人18级毛片毛片免费观看| 在线看片无码永久免费aⅴ| 亚洲精品美女久久久久99小说| 久久精品亚洲综合一品| 亚洲综合精品成人|