管理員
角色
模塊
(我的模塊表考慮了子模塊的因素,所以會有深度,父模塊ID這兩個字段,在后來開發(fā)過中,由于思路的轉(zhuǎn)變,IsRootModule,FunctionCode我都沒有用到,為了讓整個權(quán)限系統(tǒng)通變得更通用,我都將其單獨設(shè)計成了另一個表)
功能表(功能表就是模塊對應的功能:增加,刪除,修改,詳細,列表,瀏覽,導出,導入之類的)
業(yè)務(wù)表:用戶-角色表 模塊-功能表 角色-模塊表
要實現(xiàn)一個用戶多個角色(1 to n),一個角色多個模塊(1 to n),一個模塊多個功能(1 to n),那就得加上幾個相關(guān)的業(yè)務(wù)表,之前考慮用視圖去實現(xiàn),我個人之見,視圖最好只用來讀取數(shù)據(jù),不要用來進行數(shù)據(jù)操作.后來證明是不可取的,這里要注意的就是在實際的業(yè)務(wù)操作中,應該盡量避免重復的數(shù)據(jù)錄入. 這些表都很簡單,但卻很關(guān)鍵
用戶-角色:
角色-模塊:
模塊-功能:
大家可以看到,表結(jié)構(gòu)很簡單,字段也很少,設(shè)計也差不多。都是將相關(guān)聯(lián)的字段ID取出來做數(shù)據(jù)存取。
視圖:用戶-角色-模塊-功能視圖
可能大家會覺得很奇怪,為什么這里出現(xiàn)member_role呢。因為我們在數(shù)據(jù)表中只存取了ID值,而對應的RoleName字段并沒有包含其中,這里的視圖就是獲取關(guān)聯(lián)表中其他所需要的字段數(shù)據(jù)了。另外兩個視圖大家看名字應該就知道他的用處了。
存儲過程:各自表的增加,刪除,修改,及列表數(shù)據(jù). 判斷是否存在相同的數(shù)據(jù)
(CUDLIS-Create, Update,Delete,IfExist,Show,List)
存儲過程我就不一一列出了,很簡單的,你只要寫出下面這些基本上你在開發(fā)過程就不會有太多問題了. 注意的是:在相互關(guān)聯(lián)的業(yè)務(wù)表中,最好能對數(shù)據(jù)插入進行重復數(shù)據(jù)判斷(用戶角色表,模塊功能表,角色模塊表,盡量避免重復的數(shù)據(jù)插入)我把大致需要實現(xiàn)的業(yè)務(wù)列個表給大家參考:
用戶表:(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)
針對用戶直接獲取其所有的權(quán)限時,應該有個單獨的Procedure從視圖中Member_Role_Module_Function中獲取其對應的數(shù)據(jù),這樣就可以得到想要的東西了。
數(shù)據(jù)庫設(shè)計部分應該就這樣差不多了。我想這應該是通用的。在實際運用過程中,我個人認為應該有一些改進點:
1.模塊與功能部分,可以用字符串的形式將模塊對應的功能存在一個數(shù)據(jù)字段中,這樣可能在你的代碼編寫中可以省下較多的時間并帶來更多的便利(主要是可以用split()來代替頻繁的數(shù)據(jù)獲取業(yè)務(wù))這個我在最初設(shè)計中沒有想到這點,有點失策.
2.針對N級模塊的權(quán)限展現(xiàn)問題,如何讓父模塊繼承子模塊的權(quán)限這個是我沒有考慮到的,不過我想應該可以用IsRootModule這個字段來作文章,可惜我還沒想到如何去整這個字段。當子模塊很多時,在前端UI展示的時候是否會出現(xiàn)很慢的情況?這個我沒有去做測試。帶有一定的風險
但在前端UI展示我還沒想到或?qū)崿F(xiàn)好的辦法,我能想到的應該是像GridViewTree那種不錯。
這個權(quán)限設(shè)計已經(jīng)在我的Project中運用,暫時沒有發(fā)現(xiàn)什么問題,而且為我以后對其它系統(tǒng)集成也很有幫助。至于如何在C#中實現(xiàn)業(yè)務(wù),個人認為只要知道數(shù)據(jù)庫如何整的,那C#中的業(yè)務(wù)實現(xiàn)只是一個取數(shù)操作過程。下篇與大家再共同分享討論.