隨筆 - 147  文章 - 71  trackbacks - 0
          <2009年6月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

          常用鏈接

          留言簿(1)

          隨筆分類(146)

          隨筆檔案(147)

          文章分類(28)

          文章檔案(28)

          喜歡的Blog

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          用戶管理權(quán)限設(shè)計(jì)一直是大家討論的熱點(diǎn),因?yàn)閹缀跎婕暗矫恳粋€(gè)開發(fā)的業(yè)務(wù)系統(tǒng)。我找了很多很多的資料,大家的核心基本上都是一樣的:基于角色管理. 用戶,角色,模塊,權(quán)限的相互組合,就可以形成一個(gè)強(qiáng)大的權(quán)限管理系統(tǒng)。

          最近在一個(gè)項(xiàng)目中設(shè)計(jì)的一個(gè)用戶權(quán)限的設(shè)計(jì),很樂意與大家一起討論及分享.

          設(shè)計(jì)思路

          我的設(shè)計(jì)思路或者說是我想要實(shí)現(xiàn)的功能

          1.用戶的權(quán)限通過角色來控制,一個(gè)用戶可以擁有多個(gè)角色.

          2.用戶擁有不同角色時(shí),其權(quán)限應(yīng)該是多個(gè)角色相互的補(bǔ)集.

          3.一個(gè)角色擁有多個(gè)模塊

          4.用戶的前臺(tái)菜單顯示根據(jù)角色所擁有的模塊所決定,不同的用戶在前端顯示的操作菜單是不一樣的。

          5.頁(yè)面中的功能按鈕根據(jù)模塊中所包含的功能所定義,通過模塊及角色所擁有的權(quán)限進(jìn)行控制

          6.可看某個(gè)模塊有哪些用戶,哪些對(duì)應(yīng)角色,并對(duì)其進(jìn)行特殊權(quán)限設(shè)置.

          7.可以針對(duì)單個(gè)用戶進(jìn)行特殊設(shè)置

          我在我的Project中,基本上達(dá)到了以上的效果及功能,但在實(shí)際過程中發(fā)現(xiàn)有些不足之處。因?yàn)檎麄€(gè)權(quán)限設(shè)計(jì)是基于數(shù)據(jù)庫(kù)來設(shè)計(jì)中,所以數(shù)據(jù)的讀取當(dāng)數(shù)據(jù)量大時(shí)(我所說的數(shù)據(jù)量是以萬以上來計(jì))可能對(duì)性能有一定的影響。但對(duì)于一般來說,幾千用戶之類的我想還是可以承受的。我會(huì)在后面說明不足之處。

          數(shù)據(jù)庫(kù)設(shè)計(jì)

          基本設(shè)計(jì):

          1.首先,設(shè)計(jì)數(shù)據(jù)庫(kù).

          數(shù)據(jù)庫(kù)的設(shè)計(jì)其實(shí)我估計(jì)大家都很熟悉了

          基本表:用戶表,角色表,模塊表,功能表,管理員表.如果涉及到企業(yè)性質(zhì)的,可能會(huì)根據(jù)需要加上組織結(jié)構(gòu)表,群組表等其它輔助表

          用戶

           

          管理員

          角色

          模塊

          (我的模塊表考慮了子模塊的因素,所以會(huì)有深度,父模塊ID這兩個(gè)字段,在后來開發(fā)過中,由于思路的轉(zhuǎn)變,IsRootModule,FunctionCode我都沒有用到,為了讓整個(gè)權(quán)限系統(tǒng)通變得更通用,我都將其單獨(dú)設(shè)計(jì)成了另一個(gè)表)

          功能表(功能表就是模塊對(duì)應(yīng)的功能:增加,刪除,修改,詳細(xì),列表,瀏覽,導(dǎo)出,導(dǎo)入之類的)

          業(yè)務(wù)表:用戶-角色表 模塊-功能表 角色-模塊表

          要實(shí)現(xiàn)一個(gè)用戶多個(gè)角色(1 to n),一個(gè)角色多個(gè)模塊(1 to n),一個(gè)模塊多個(gè)功能(1 to n),那就得加上幾個(gè)相關(guān)的業(yè)務(wù)表,之前考慮用視圖去實(shí)現(xiàn),我個(gè)人之見,視圖最好只用來讀取數(shù)據(jù),不要用來進(jìn)行數(shù)據(jù)操作.后來證明是不可取的,這里要注意的就是在實(shí)際的業(yè)務(wù)操作中,應(yīng)該盡量避免重復(fù)的數(shù)據(jù)錄入. 這些表都很簡(jiǎn)單,但卻很關(guān)鍵

          用戶-角色:

          角色-模塊:

          模塊-功能:

          大家可以看到,表結(jié)構(gòu)很簡(jiǎn)單,字段也很少,設(shè)計(jì)也差不多。都是將相關(guān)聯(lián)的字段ID取出來做數(shù)據(jù)存取。

          視圖:用戶-角色-模塊-功能視圖

           

          可能大家會(huì)覺得很奇怪,為什么這里出現(xiàn)member_role呢。因?yàn)槲覀冊(cè)跀?shù)據(jù)表中只存取了ID值,而對(duì)應(yīng)的RoleName字段并沒有包含其中,這里的視圖就是獲取關(guān)聯(lián)表中其他所需要的字段數(shù)據(jù)了。另外兩個(gè)視圖大家看名字應(yīng)該就知道他的用處了。

          存儲(chǔ)過程:各自表的增加,刪除,修改,及列表數(shù)據(jù). 判斷是否存在相同的數(shù)據(jù)
          (CUDLIS-Create, Update,Delete,IfExist,Show,List)

          存儲(chǔ)過程我就不一一列出了,很簡(jiǎn)單的,你只要寫出下面這些基本上你在開發(fā)過程就不會(huì)有太多問題了. 注意的是:在相互關(guān)聯(lián)的業(yè)務(wù)表中,最好能對(duì)數(shù)據(jù)插入進(jìn)行重復(fù)數(shù)據(jù)判斷(用戶角色表,模塊功能表,角色模塊表,盡量避免重復(fù)的數(shù)據(jù)插入)我把大致需要實(shí)現(xiàn)的業(yè)務(wù)列個(gè)表給大家參考:

          用戶表:(Insert ,Update ,IfExist ,Show, Delete)

          用戶角色表:(Insert ,Update,IfExist,Delete,RoleListByUserID,UserListByRoleID)

          角色表:(Insert,Update,IfExist,Show,Delete)

          角色模塊表:(Insert,IfExist,Delete,Show,RoleListByModuleID,ModulistByRoleID)

          模塊表:(Insert,Update,IfExist,Show,Dlete,ListByRootModuleID,ListByModuleLevel)

          模塊功能表:(Insert,Update,Delete,FunctionListByModuleID)

          針對(duì)用戶直接獲取其所有的權(quán)限時(shí),應(yīng)該有個(gè)單獨(dú)的Procedure從視圖中Member_Role_Module_Function中獲取其對(duì)應(yīng)的數(shù)據(jù),這樣就可以得到想要的東西了。

          數(shù)據(jù)庫(kù)設(shè)計(jì)部分應(yīng)該就這樣差不多了。我想這應(yīng)該是通用的。在實(shí)際運(yùn)用過程中,我個(gè)人認(rèn)為應(yīng)該有一些改進(jìn)點(diǎn):

          1.模塊與功能部分,可以用字符串的形式將模塊對(duì)應(yīng)的功能存在一個(gè)數(shù)據(jù)字段中,這樣可能在你的代碼編寫中可以省下較多的時(shí)間并帶來更多的便利(主要是可以用split()來代替頻繁的數(shù)據(jù)獲取業(yè)務(wù))這個(gè)我在最初設(shè)計(jì)中沒有想到這點(diǎn),有點(diǎn)失策.

          2.針對(duì)N級(jí)模塊的權(quán)限展現(xiàn)問題,如何讓父模塊繼承子模塊的權(quán)限這個(gè)是我沒有考慮到的,不過我想應(yīng)該可以用IsRootModule這個(gè)字段來作文章,可惜我還沒想到如何去整這個(gè)字段。當(dāng)子模塊很多時(shí),在前端UI展示的時(shí)候是否會(huì)出現(xiàn)很慢的情況?這個(gè)我沒有去做測(cè)試,帶有一定的風(fēng)險(xiǎn)。
          但在前端UI展示我還沒想到或?qū)崿F(xiàn)好的辦法,我能想到的應(yīng)該是像GridViewTree那種不錯(cuò)。

          這個(gè)權(quán)限設(shè)計(jì)已經(jīng)在我的Project中運(yùn)用,暫時(shí)沒有發(fā)現(xiàn)什么問題,而且為我以后對(duì)其它系統(tǒng)集成也很有幫助。至于如何在C#中實(shí)現(xiàn)業(yè)務(wù),個(gè)人認(rèn)為只要知道數(shù)據(jù)庫(kù)如何整的,那C#中的業(yè)務(wù)實(shí)現(xiàn)只是一個(gè)取數(shù)操作過程。

          posted on 2009-06-26 20:24 飛翔天使 閱讀(33597) 評(píng)論(9)  編輯  收藏 所屬分類: SQL

          FeedBack:
          # re: 用戶權(quán)限管理設(shè)計(jì) 2012-11-05 11:08 李瑤
          你好我很好  回復(fù)  更多評(píng)論
            
          # re: 用戶權(quán)限管理設(shè)計(jì) 2013-01-17 11:26 Mr.hua
          模塊,這一塊的另一個(gè)表是怎么樣的?  回復(fù)  更多評(píng)論
            
          # re: 用戶權(quán)限管理設(shè)計(jì) 2013-05-23 10:44 zl
          貌似表關(guān)聯(lián)有點(diǎn)多了 操作不是很方便  回復(fù)  更多評(píng)論
            
          # re: 用戶權(quán)限管理設(shè)計(jì) 2013-05-23 10:45 zl
          貌似表關(guān)聯(lián)有點(diǎn)多了 操作不是很方便

          我自己做的話 會(huì)把角色跟功能直接關(guān)聯(lián)  回復(fù)  更多評(píng)論
            
          # re: 用戶權(quán)限管理設(shè)計(jì) 2013-08-16 17:39 Chuck
          我在想,如果你把關(guān)系字段全部放在一個(gè)字段里面,如果你要?jiǎng)h除其中一個(gè)怎么搞啊?  回復(fù)  更多評(píng)論
            
          # re: 用戶權(quán)限管理設(shè)計(jì) 2013-09-12 18:18 LDL
          @Chuck
          基本是這樣的,我也做過權(quán)限的,權(quán)限是比較復(fù)雜的,有外鍵關(guān)聯(lián)才能突出它的限制,關(guān)于刪除,可以用級(jí)聯(lián),房主也說了一些不足之處!  回復(fù)  更多評(píng)論
            
          # re: 用戶權(quán)限管理設(shè)計(jì) 2014-05-27 13:18 2
          # re: 用戶權(quán)限管理設(shè)計(jì) 2014-06-04 17:39 alading
          @Chuck
          刪除其實(shí)可以用狀態(tài)作為標(biāo)記的  回復(fù)  更多評(píng)論
            
          # re: 用戶權(quán)限管理設(shè)計(jì)[未登錄] 2014-08-19 12:03 Ray
          博主能收下你這里的用戶表和管理員表在這分別是做什么用的?
          我不太清楚管理員表在這的作用。  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 长泰县| 章丘市| 阜宁县| 和顺县| 江门市| 商丘市| 竹山县| 曲沃县| 福贡县| 文成县| 吴旗县| 孝义市| 高青县| 安乡县| 桐梓县| 达州市| 久治县| 瑞丽市| 科技| 囊谦县| 娱乐| 罗源县| 光山县| 仪征市| 舒兰市| 济南市| 文登市| 那曲县| 丘北县| 赣州市| 九江县| 澎湖县| 忻城县| 莲花县| 泽库县| 陈巴尔虎旗| 杨浦区| 定南县| 岳阳市| 绩溪县| 库车县|