最近在設計權限方面的內容,有些想法,亂彈一下。個人覺得實現權限系統主要是三個方面:
1、授權。主要是授權模型的維護,如資源、角色、用戶、部門的對應關系等。
2、認證。主要是用戶身份的認證,以及取出用戶的權限。
3、校驗權限。當用戶對某一資源進行操作時,將用戶的權限與操作該資源所應有的權限進行比對校驗。
在對這三個方面進行說明前,也想說說對數據權限的看法。什么是數據權限,很簡單,
考慮一種場景 (javaeye里的例子)
看看銷售數據
A銷售員可以看到自己的銷售情況和每一筆具體銷售業務,但是看不到B的
B銷售員可以看到自己的銷售情況和每一筆具體銷售業務,但是看不到A的
分公司銷售經理則可以看到本部門的A和B的銷售情況,但是看不到其他分公司的銷售業務
集團銷售Boss可以看到集團內所有分公司的銷售業務數據
共同點:他們都可以看到“銷售數據”這一模塊
不同點:他們讀取數據的范圍是不一樣的
這個也可以叫做實例級權限控制。有人認為這種權限一般是放在業務里做的, 如果非要用一個固定的模型實現,可以參考 ACL, 不過也是要在業務里寫 ACL 相關代碼的。確實,以前自己也都是放在業務里做的,但一直認為這也應該是權限系統的一部分,通過用戶的權限來構造不同的sql語句。具體通過AOP實現,好象已經有個開源的東西還沒看(lllyq的http://bba96.dev.java.net)。ACL對實例級權限控制感覺效率會有問題,個人看法。
具體來說:
1、授權
?? 具體開發里簡便的授權方式已經成了用戶必提的要求,很明顯,僅僅基于role和權限交互是遠遠不夠的。現實中你必須把角色、用戶、部門三者全部與權限掛鉤。而這三者毫無疑問地就會存在權限繼承的問題。考慮一下,在部門A增加一個用戶,很顯然該用戶會繼承部門A的權限;同時如果在部門A下增加一個部門角色,該角色應不應該也繼承部門A的權限呢?也許需要一個規則接口,具體規則實現看客戶需求。
?? 再說說資源,這里僅討論系統資源不考慮數據資源。考慮一個“業務管理”的模塊,該模塊下面還有“項目管理”,“物品管理”,“采購管理”三個模塊,當對用戶賦予了“業務管理”模塊的查看權限,用戶是否同時對“項目管理”,“物品管理”,“采購管理”具有查看權限呢?這里同樣存在資源權限繼承的問題。客戶的需求是不同的,所以同樣需要一個資源權限繼承的規則接口。
?? 最后說說授權信息的保存。考慮ACL。表設計:資源ID,權限主體ID,權限主體TYPE,資源操作權限。一開始考慮權限主體ID就是UserID,這樣會在認證的時候效率很高,但考慮到部門A下有100個用戶,當對部門A增加一個權限時,實際上會往ACL表里插入100條記錄,這就讓人不能接受了。
2、認證
?? 其實就兩個方面,一是檢查是否存在這個用戶,二是取出用戶的權限。呵呵,這里有些絕對了,取出用戶的權限完全可以放到校驗權限里來做,不必這里一次性全讀出來。用戶的權限放在一個List里,對象可以構造一個,兩個屬性:資源ID和資源操作權限。取出用戶的權限時候要用到上面定義的規則接口來組裝用戶實際的所有權限。
2、校驗權限
?? 這個就比較簡單了,個人傾向于在Action里完成這個工作,需要進行權限檢查的Action實現一個接口,接口里有一個 public boolean hasPermission() ,寫個攔截器攔截即可。這里的關鍵還是通過資源權限繼承的規則接口來校驗用戶操作該資源的權限。
完全是個人亂彈,歡迎拍磚:)
http://www.aygfsteel.com/ronghao 榮浩原創,轉載請注明出處:)
FeedBack:
# re: 也來亂彈權限系統
2006-06-29 22:06 | wolfsquare
只有注冊用戶登錄后才能發表評論。 | ||
![]() |
||
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
|
||
相關文章:
|
||
| |||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
---|---|---|---|---|---|---|---|---|---|
28 | 29 | 30 | 31 | 1 | 2 | 3 | |||
4 | 5 | 6 | 7 | 8 | 9 | 10 | |||
11 | 12 | 13 | 14 | 15 | 16 | 17 | |||
18 | 19 | 20 | 21 | 22 | 23 | 24 | |||
25 | 26 | 27 | 28 | 29 | 30 | 1 | |||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
關注工作流和企業業務流程改進。現就職于ThoughtWorks。新浪微博:http://weibo.com/ronghao100
常用鏈接
留言簿(38)
隨筆分類
- ajax相關(9)
- cms(7)
- Head First Process-深入淺出流程(15)
- j2se基礎(6)
- JbpmSide(6)
- OOA/OOD(4)
- SOA、BPM(26)
- 工作日志(24)
- 工作流jbpm3(10)
- 張小慶,在路上(42)
- 心情小站(24)
- 權限相關(12)
- 表現層相關(4)
- 轉載(4)
隨筆檔案
- 2013年8月 (1)
- 2012年12月 (1)
- 2012年1月 (3)
- 2011年12月 (2)
- 2011年11月 (2)
- 2011年10月 (3)
- 2011年9月 (3)
- 2011年8月 (7)
- 2011年7月 (4)
- 2011年6月 (3)
- 2011年5月 (5)
- 2011年4月 (6)
- 2011年3月 (4)
- 2011年2月 (2)
- 2010年9月 (1)
- 2010年6月 (1)
- 2010年5月 (1)
- 2010年3月 (4)
- 2010年1月 (2)
- 2009年11月 (5)
- 2009年10月 (4)
- 2009年9月 (1)
- 2009年7月 (1)
- 2009年6月 (2)
- 2009年5月 (2)
- 2009年4月 (1)
- 2009年3月 (4)
- 2009年2月 (2)
- 2008年12月 (1)
- 2008年11月 (1)
- 2008年10月 (1)
- 2008年9月 (2)
- 2008年8月 (2)
- 2008年7月 (2)
- 2008年6月 (3)
- 2008年5月 (4)
- 2008年4月 (1)
- 2008年3月 (2)
- 2008年2月 (2)
- 2008年1月 (4)
- 2007年11月 (3)
- 2007年10月 (3)
- 2007年9月 (2)
- 2007年8月 (4)
- 2007年7月 (1)
- 2007年6月 (12)
- 2007年5月 (2)
- 2007年4月 (1)
- 2007年3月 (8)
- 2007年2月 (6)
- 2007年1月 (4)
- 2006年12月 (4)
- 2006年11月 (3)
- 2006年10月 (1)
- 2006年8月 (2)
- 2006年7月 (3)
- 2006年6月 (3)
- 2006年4月 (1)
- 2006年3月 (2)
- 2006年2月 (2)
- 2006年1月 (4)
- 2005年12月 (7)
- 2005年11月 (12)
文章分類
文章檔案
常去的網站
搜索
最新評論

- 1.?re: 使用Handler來增強Web服務的功能
- asdfasfd
- --ads
- 2.?re: 使用solr搭建你的全文檢索
-
@木哥哥
你的分詞器用的是什么啊?mmseg貌似可以的 - --陳冠馳
- 3.?re: 使用solr搭建你的全文檢索
-
@marten這是你的solr的schame.xml配置文件有問題。好好檢查下你的配置文件里面的字段什么的配置對著沒
- --陳冠馳
- 4.?re: 討論一下你覺得一個工作流產品好的標準
- 評論內容較長,點擊標題查看
- --深圳非凡信息技術有限公司
- 5.?re: DisplayTag應用
- name="test"從哪里來的,千篇一律的到處使用test卻沒有test的定義,sb
- --qige