<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è)計權(quán)限方面的內(nèi)容,有些想法,亂彈一下。個人覺得實現(xiàn)權(quán)限系統(tǒng)主要是三個方面:
    1、授權(quán)。主要是授權(quán)模型的維護(hù),如資源、角色、用戶、部門的對應(yīng)關(guān)系等。
    2、認(rèn)證。主要是用戶身份的認(rèn)證,以及取出用戶的權(quán)限。
    3、校驗權(quán)限。當(dāng)用戶對某一資源進(jìn)行操作時,將用戶的權(quán)限與操作該資源所應(yīng)有的權(quán)限進(jìn)行比對校驗。
    在對這三個方面進(jìn)行說明前,也想說說對數(shù)據(jù)權(quán)限的看法。什么是數(shù)據(jù)權(quán)限,很簡單,
    考慮一種場景 (javaeye里的例子)
    看看銷售數(shù)據(jù)
    A銷售員可以看到自己的銷售情況和每一筆具體銷售業(yè)務(wù),但是看不到B的
    B銷售員可以看到自己的銷售情況和每一筆具體銷售業(yè)務(wù),但是看不到A的
    分公司銷售經(jīng)理則可以看到本部門的A和B的銷售情況,但是看不到其他分公司的銷售業(yè)務(wù)
    集團(tuán)銷售Boss可以看到集團(tuán)內(nèi)所有分公司的銷售業(yè)務(wù)數(shù)據(jù)
    共同點:他們都可以看到“銷售數(shù)據(jù)”這一模塊
    不同點:他們讀取數(shù)據(jù)的范圍是不一樣的
    這個也可以叫做實例級權(quán)限控制。有人認(rèn)為這種權(quán)限一般是放在業(yè)務(wù)里做的, 如果非要用一個固定的模型實現(xiàn),可以參考 ACL, 不過也是要在業(yè)務(wù)里寫 ACL 相關(guān)代碼的。確實,以前自己也都是放在業(yè)務(wù)里做的,但一直認(rèn)為這也應(yīng)該是權(quán)限系統(tǒng)的一部分,通過用戶的權(quán)限來構(gòu)造不同的sql語句。具體通過AOP實現(xiàn),好象已經(jīng)有個開源的東西還沒看(lllyq的http://bba96.dev.java.net)。ACL對實例級權(quán)限控制感覺效率會有問題,個人看法。
    具體來說:
    1、授權(quán)
    ?? 具體開發(fā)里簡便的授權(quán)方式已經(jīng)成了用戶必提的要求,很明顯,僅僅基于role和權(quán)限交互是遠(yuǎn)遠(yuǎn)不夠的。現(xiàn)實中你必須把角色、用戶、部門三者全部與權(quán)限掛鉤。而這三者毫無疑問地就會存在權(quán)限繼承的問題。考慮一下,在部門A增加一個用戶,很顯然該用戶會繼承部門A的權(quán)限;同時如果在部門A下增加一個部門角色,該角色應(yīng)不應(yīng)該也繼承部門A的權(quán)限呢?也許需要一個規(guī)則接口,具體規(guī)則實現(xiàn)看客戶需求。
    ?? 再說說資源,這里僅討論系統(tǒng)資源不考慮數(shù)據(jù)資源。考慮一個“業(yè)務(wù)管理”的模塊,該模塊下面還有“項目管理”,“物品管理”,“采購管理”三個模塊,當(dāng)對用戶賦予了“業(yè)務(wù)管理”模塊的查看權(quán)限,用戶是否同時對“項目管理”,“物品管理”,“采購管理”具有查看權(quán)限呢?這里同樣存在資源權(quán)限繼承的問題。客戶的需求是不同的,所以同樣需要一個資源權(quán)限繼承的規(guī)則接口。
    ?? 最后說說授權(quán)信息的保存。考慮ACL。表設(shè)計:資源ID,權(quán)限主體ID,權(quán)限主體TYPE,資源操作權(quán)限。一開始考慮權(quán)限主體ID就是UserID,這樣會在認(rèn)證的時候效率很高,但考慮到部門A下有100個用戶,當(dāng)對部門A增加一個權(quán)限時,實際上會往ACL表里插入100條記錄,這就讓人不能接受了。
    2、認(rèn)證
    ?? 其實就兩個方面,一是檢查是否存在這個用戶,二是取出用戶的權(quán)限。呵呵,這里有些絕對了,取出用戶的權(quán)限完全可以放到校驗權(quán)限里來做,不必這里一次性全讀出來。用戶的權(quán)限放在一個List里,對象可以構(gòu)造一個,兩個屬性:資源ID和資源操作權(quán)限。取出用戶的權(quán)限時候要用到上面定義的規(guī)則接口來組裝用戶實際的所有權(quán)限。
    2、校驗權(quán)限
    ?? 這個就比較簡單了,個人傾向于在Action里完成這個工作,需要進(jìn)行權(quán)限檢查的Action實現(xiàn)一個接口,接口里有一個 public boolean hasPermission() ,寫個攔截器攔截即可。這里的關(guān)鍵還是通過資源權(quán)限繼承的規(guī)則接口來校驗用戶操作該資源的權(quán)限。
    完全是個人亂彈,歡迎拍磚:)

    http://www.tkk7.com/ronghao 榮浩原創(chuàng),轉(zhuǎn)載請注明出處:)
    posted on 2006-06-29 16:29 ronghao 閱讀(3636) 評論(2)  編輯  收藏 所屬分類: 權(quán)限相關(guān)

    FeedBack:
    # re: 也來亂彈權(quán)限系統(tǒng)
    2006-06-29 22:06 | wolfsquare
    >現(xiàn)實中你必須把角色、用戶、部門三者全部與權(quán)限掛鉤。
    這么說是沒錯了,但是不作處理的直接掛鉤的話估計腦袋是被彗星砸過的亞.
    >Action實現(xiàn)一個接口,接口里有一個 public boolean hasPermission() ,寫個攔截器攔截即可。
    太麻煩了,每個Action都要寫,建議權(quán)限放在業(yè)務(wù)層來進(jìn)行控制.
    每種權(quán)限系統(tǒng)雖然概念類似,可是實現(xiàn)細(xì)節(jié)卻千差萬別,所以好用不好用,是馬是騾還得拿出來溜溜才知道.  回復(fù)  更多評論
      
    # re: 也來亂彈權(quán)限系統(tǒng)
    2008-04-11 17:37 | 々上善若水々
    你不會把public boolean hasPermission() 寫在父類里?  回復(fù)  更多評論
      
    <2006年6月>
    28293031123
    45678910
    11121314151617
    18192021222324
    2526272829301
    2345678

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

    常用鏈接

    留言簿(38)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    常去的網(wǎng)站

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 香蕉97碰碰视频免费| 亚洲AⅤ男人的天堂在线观看| 一级中文字幕乱码免费| 国产精品久久免费视频| 国产精品自拍亚洲| 亚洲国产天堂久久综合| 久久精品无码免费不卡| 久久乐国产精品亚洲综合| www免费黄色网| 久久精品国产亚洲香蕉| 久久成人免费播放网站| 亚洲最大成人网色| 伊人久久精品亚洲午夜| 中文字幕免费在线播放| 亚洲av色影在线| 国内精品免费麻豆网站91麻豆| 亚洲五月丁香综合视频| 无码国模国产在线观看免费| 免费手机在线看片| 成年美女黄网站18禁免费| 亚洲日本VA午夜在线影院| 免费一看一级毛片| 91视频免费观看高清观看完整| 亚洲情a成黄在线观看动漫尤物| 四虎成年永久免费网站| 亚洲欧美日韩国产成人| 亚洲日韩人妻第一页| 四虎影视在线影院在线观看免费视频 | 免费视频成人国产精品网站| 狠狠亚洲狠狠欧洲2019| 无码精品国产一区二区三区免费 | 日韩精品无码永久免费网站| 亚洲中文字幕久久精品无码喷水 | 一区二区三区免费视频网站 | 精品国产日韩亚洲一区在线| 亚洲一区爱区精品无码| 1000部国产成人免费视频| 成a人片亚洲日本久久| 亚洲成AV人片在线观看| 午夜时刻免费入口| 日本免费在线观看|