posts - 297,  comments - 1618,  trackbacks - 0
           一.引言

                 因為做過的一些系統的權限管理的功能雖然在逐步完善,但總有些不盡人意的地方,總想抽個時間來更好的思考一下權限系統的設計。

                 權限系統一直以來是我們應用系統不可缺少的一個部分,若每個應用系統都重新對系統的權限進行設計,以滿足不同系統用戶的需求,將會浪費我們不少寶貴時間,所以花時間來設計一個相對通用的權限系統是很有意義的。

          二.設計目標

                 設計一個靈活、通用、方便的權限管理系統。

                 在這個系統中,我們需要對系統的所有資源進行權限控制,那么系統中的資源包括哪些呢?我們可以把這些資源簡單概括為靜態資源(功能操作、數據列)和動態資源(數據),也分別稱為對象資源數據資源,后者是我們在系統設計與實現中的叫法。

          系統的目標就是對應用系統的所有對象資源和數據資源進行權限控制,比如應用系統的功能菜單、各個界面的按鈕、數據顯示的列以及各種行級數據進行權限的操控。

          三.相關對象及其關系

                 大概理清了一下權限系統的相關概念,如下所示:

          1.       權限

          系統的所有權限信息。權限具有上下級關系,是一個樹狀的結構。下面來看一個例子

          系統管理

                  用戶管理

                         查看用戶

                          新增用戶

                               修改用戶

                               刪除用戶

                 對于上面的每個權限,又存在兩種情況,一個是只是可訪問,另一種是可授權,例如對于“查看用戶”這個權限,如果用戶只被授予“可訪問”,那么他就不能將他所具有的這個權限分配給其他人。

          2.       用戶

          應用系統的具體操作者,用戶可以自己擁有權限信息,可以歸屬于0n個角色,可屬于0n個組。他的權限集是自身具有的權限、所屬的各角色具有的權限、所屬的各組具有的權限的合集。它與權限、角色、組之間的關系都是nn的關系。

          3.       角色

          為了對許多擁有相似權限的用戶進行分類管理,定義了角色的概念,例如系統管理員、管理員、用戶、訪客等角色。角色具有上下級關系,可以形成樹狀視圖,父級角色的權限是自身及它的所有子角色的權限的綜合。父級角色的用戶、父級角色的組同理可推。

          4.      

          為了更好地管理用戶,對用戶進行分組歸類,簡稱為用戶分組。組也具有上下級關系,可以形成樹狀視圖。在實際情況中,我們知道,組也可以具有自己的角色信息、權限信息。這讓我想到我們的QQ用戶群,一個群可以有多個用戶,一個用戶也可以加入多個群。每個群具有自己的權限信息。例如查看群共享。QQ群也可以具有自己的角色信息,例如普通群、高級群等。

          針對上面提出的四種類型的對象,讓我們通過圖來看看他們之間的關系。

           

              有上圖中可以看出,這四者的關系很復雜,而實際的情況比這個圖還要復雜,權限、角色、組都具有上下級關系,權限管理是應用系統中比較棘手的問題,要設計一個通用的權限管理系統,工作量也著實不小。

          當然對于有些項目,權限問題并不是那么復雜。有的只需要牽涉到權限和用戶兩種類型的對象,只需要給用戶分配權限即可。

          在另一些情況中,引入了角色對象,例如基于角色的權限系統, 只需要給角色分配權限,用戶都隸屬于角色,不需要單獨為用戶分配角色信息。

          在下一篇中,我們將講述權限管理的數據庫設計等內容。
              歡迎各位拍磚或給出寶貴意見。

              參考文章:應用程序權限設計
                        心情小站——權限相關
                       

          posted on 2007-09-29 11:26 阿蜜果 閱讀(25921) 評論(22)  編輯  收藏 所屬分類: Open Source


          FeedBack:
          # re: 通用權限管理設計篇(一)
          2007-09-29 13:07 | l_qin
          不錯,支持下。其實我也很想做一個通用的權限管理系統?,F在我所在的組的一個系統的權限管理設計的實在是爛,隨便什么人都可以給自己配置管理員的權限,說有權限,其實是沒有權限控制的。建議看看http://www.aygfsteel.com/RongHao/ 的blog關于權限部分,我覺得挺不錯的  回復  更多評論
            
          # re: 通用權限管理設計篇(一)
          2007-09-29 13:16 | 阿蜜果
          @ l_qin
          謝謝,他的blog我已經看過了,呵呵,蠻不錯  回復  更多評論
            
          # re: 通用權限管理設計篇(一)
          2007-09-29 16:40 | 編程、設計是職業更是愛好
          從理論上來講,深究權限的關系圖的確是這樣子,但這張圖應該是給我設計人員看的,使用者關心的是,"我有什么權限或者我能干什么",稍微引申一下,"我在哪個組或者我是什么角色",所以感覺只有三層關系即可,User -> Group/Role -> Permission,中間的環節是為了便于管理而不是使用的,在用戶眼中,應該就是User -> Permission.  回復  更多評論
            
          # re: 通用權限管理設計篇(一)
          2007-09-30 00:17 | 老同學
          之前偶做過一個中等復雜的權限系統,目標應用只需要實現幾個接口就可以完全重用。模型包括用戶、組、角色、權限、資源。不過后來發覺普通的應用這樣的抽象有點復雜了,雖然可以進行很靈活的控制?,F在倒時想返樸歸真簡簡單單,用戶或組跟資源直接產生關系就完了。Confluence就是這樣做。  回復  更多評論
            
          # re: 通用權限管理設計篇(一)
          2007-10-06 13:50 | mingj
          @老同學
          不錯,
          用戶-組-資源
          這樣的權限控制會簡單而有效
          類似于數據庫對用戶的權限管理  回復  更多評論
            
          # re: 通用權限管理設計篇(一)
          2007-10-07 13:41 | java_蟈蟈
          @老同學
          同感
          靈活、簡單、有效最好......  回復  更多評論
            
          # re: 通用權限管理設計篇(一)
          # re: 通用權限管理設計篇(一)
          2007-10-07 22:26 | leekiang
          我覺得最麻煩的是如何做到所見即所得,比如有四個按鈕,分別是增刪改查,如何方便的讓沒有增刪改權限的人看不見這三個按鈕,并且禁止他直接通過url進行增刪改。  回復  更多評論
            
          # re: 通用權限管理設計篇(一)
          2008-05-10 09:33 | yootiger
          本人對這里滴組不是怎么樣清楚,是否能補充一下呢?
          yootiger@126.com   回復  更多評論
            
          # re: 通用權限管理設計篇(一)
          2008-07-16 11:21 | 麒麟
          一個組能可以當做公司的部門來看待嗎
          zhuqil@163.com  回復  更多評論
            
          # re: 通用權限管理設計篇(一)
          2009-04-28 00:02 | TaoistWar
          組好像沒多大作用吧?組和角色之間有什么根本的區別?  回復  更多評論
            
          # re: 通用權限管理設計篇(一)
          2010-09-16 15:25 | ltian
          實說實說,離通用權限距離遙遠。  回復  更多評論
            
          # re: 通用權限管理設計篇(一)[未登錄]
          2010-11-01 14:41 | Hw
          寫的太好了,要好好學習學習啊......  回復  更多評論
            
          # re: 通用權限管理設計篇(一)[未登錄]
          2010-11-09 13:08 | 小丸子
          看了一到三,沒有看到對動態資源或者說數據資源的權限控制??!難道因為這與具體的數據有關,就不能提取通用的模式了嗎?  回復  更多評論
            
          # re: 通用權限管理設計篇(一)
          2011-04-07 13:08 | YangTang
          嗯,不錯!但還沒看懂,能整個通用的不?而且要加上Spring Security才可以!  回復  更多評論
            
          # re: 通用權限管理設計篇(一)
          2011-06-16 14:01 | harley
          寫的非常好,值得學習研究

          不過我有一點不是很明白,角色的繼承是怎么回事,群組權限繼承怎么實現?

          謝謝!  回復  更多評論
            
          # re: 通用權限管理設計篇(一)
          2012-08-10 21:14 | 小彭
          @mingj
          不錯  回復  更多評論
            
          # re: 通用權限管理設計篇(一)
          2012-08-10 21:14 | 小彭
          不錯  回復  更多評論
            
          # re: 通用權限管理設計篇(一)
          2013-05-14 16:35 | simpman
          剛絕你想多了。  回復  更多評論
            
          # re: 通用權限管理設計篇(一)
          2013-05-14 16:37 | simpman
          感覺你想多了。一個用戶組表,一個權限表,一個權限分配表,一個用戶表就可以控制了。沒必要引入角色。  回復  更多評論
            
          # re: 通用權限管理設計篇(一)
          2014-05-04 11:45 |
          @麒麟
          當然  回復  更多評論
            
          # re: 通用權限管理設計篇(一)[未登錄]
          2014-12-04 15:53 | 呵呵
          這個是實現了授權,但是如果取消權限就痛苦了。如果系統管理員希望將某個功能的權限取消,對于那些直接付給用戶的權限怎么辦,如果系統有幾萬個用戶。  回復  更多評論
            
          <2007年9月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

                生活將我們磨圓,是為了讓我們滾得更遠——“圓”來如此。
                我的作品:
                玩轉Axure RP  (2015年12月出版)
                

                Power Designer系統分析與建模實戰  (2015年7月出版)
                
               Struts2+Hibernate3+Spring2   (2010年5月出版)
               

          留言簿(263)

          隨筆分類

          隨筆檔案

          文章分類

          相冊

          關注blog

          積分與排名

          • 積分 - 2296370
          • 排名 - 3

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 前郭尔| 沁阳市| 安宁市| 报价| 芒康县| 潮安县| 南京市| 昌乐县| 新平| 仙桃市| 桐城市| 长岛县| 丽江市| 皋兰县| 沿河| 托克逊县| 庆云县| 云和县| 南安市| 望江县| 黎城县| 怀柔区| 陇川县| 宁阳县| 抚顺县| 于田县| 无棣县| 交口县| 府谷县| 长泰县| 新民市| 蓬莱市| 基隆市| 莱阳市| 仙桃市| 淳化县| 峨边| 丰台区| 巴林右旗| 汝城县| 隆昌县|