轉(zhuǎn)載自 http://blog.csdn.net/dyllove98/article/details/9414113
一蒋情、前言
之前的博客一直都還沒寫到框架的實(shí)現(xiàn)及權(quán)限系統(tǒng)怀各,今天開始寫我的權(quán)限系統(tǒng)枉长,我以前做過的項(xiàng)目基本上都有權(quán)限管理這個(gè)模塊饰豺,但各個(gè)系統(tǒng)都會(huì)有一些不太一樣连茧,有些簡(jiǎn)單點(diǎn)腹侣,有些稍微復(fù)雜一點(diǎn)乏德,一句話撤奸,我們做的系統(tǒng)都離不開這個(gè)權(quán)限系統(tǒng)吠昭。所以網(wǎng)上很多人嘗試做一個(gè)通用的權(quán)限系統(tǒng),不評(píng)論他們做的怎么樣胧瓜,只是說在網(wǎng)上能找到的直接能用的應(yīng)該不多矢棚,適用的并且能集成到項(xiàng)目中的就更少了,所以還是考慮自己做一個(gè)府喳,不一定很通用蒲肋,但足夠自己用的權(quán)限系統(tǒng)。
關(guān)于權(quán)限系統(tǒng)的文章網(wǎng)上多如牛毛兜粘,很多都是基于角色的訪問控制(RBAC)設(shè)計(jì)。但是發(fā)現(xiàn)完全實(shí)現(xiàn)RBAC的理論其實(shí)不一定好用,我想做一款適合自己的舱沧。所以首先我們必要明確我們要去實(shí)現(xiàn)哪些東西妹沙。
1、權(quán)限資源
a.菜單權(quán)限? 經(jīng)理和業(yè)務(wù)員登陸系統(tǒng)擁有的功能菜單是不一樣的
b.按鈕權(quán)限? 經(jīng)理能夠?qū)徟炖簦鴺I(yè)務(wù)員不可以
c.數(shù)據(jù)權(quán)限? A業(yè)務(wù)員看不到B業(yè)務(wù)員的單據(jù)
d.字段權(quán)限? 某些人查詢客戶信息時(shí)看不到客戶的手機(jī)號(hào)或其它字段
2距糖、用戶,應(yīng)用系統(tǒng)的具體操作者牵寺,我這里設(shè)計(jì)用戶是不能直接分配權(quán)限的悍引,必須要分配一個(gè)角色,角色中再分配權(quán)限帽氓,如果某個(gè)用戶權(quán)限比較特殊趣斤,可以為他專門建一個(gè)角色來應(yīng)用解決,因?yàn)槿绻脩粢部梢苑峙錂?quán)限系統(tǒng)就會(huì)復(fù)雜很多黎休。
3浓领、角色,為了對(duì)許多擁有相似權(quán)限的用戶進(jìn)行分類管理势腮,定義了角色的概念联贩,以上所有的權(quán)限資源都可以分配給角色,角色和用戶N:N的關(guān)系捎拯。
4泪幌、機(jī)構(gòu),樹形的公司部門結(jié)構(gòu)署照,國(guó)內(nèi)公司用的比較多祸泪,它實(shí)際上就是一個(gè)用戶組,機(jī)構(gòu)和角色N:N的關(guān)系建芙,機(jī)構(gòu)和用戶也設(shè)計(jì)成N:N的關(guān)系没隘,也就是說有時(shí)候一個(gè)用戶可以從屬于兩個(gè)部門,這種情況在我們客戶需求中的確都出現(xiàn)過禁荸。
當(dāng)然除了上面提到的主要對(duì)象還包括以下對(duì)象
5升略、菜單
6微王、按鈕
7、授權(quán)代碼以前我做的項(xiàng)目中控制數(shù)據(jù)權(quán)限有以下兩種:
a.用部門編碼來控制品嚣,只能查詢到自己所屬部門的數(shù)據(jù)
b.用項(xiàng)目編碼來控制炕倘,只能查詢到自己所屬項(xiàng)目的數(shù)據(jù)。
這樣就有一個(gè)問題翰撑,我到底要用什么字段來控制數(shù)據(jù)權(quán)限呢罩旋,所以我們就設(shè)計(jì)了一個(gè)授權(quán)代碼,如果你是用機(jī)構(gòu)來控制數(shù)據(jù)權(quán)限眶诈,那么你可以把授權(quán)代碼建成跟機(jī)構(gòu)一樣的樹涨醋,如果用項(xiàng)目編碼控制,可以把它建成項(xiàng)目樹逝撬,用其它字段控制都一樣浴骂,所以會(huì)比較靈活,也把機(jī)構(gòu)或項(xiàng)目解放出來了宪潮。
8溯警、數(shù)據(jù)字典
9、系統(tǒng)參數(shù)
10狡相、日志查詢登陸日志梯轻、操作日志(xx人xx時(shí)間對(duì)xx對(duì)象做了xx操作 自定義的)、系統(tǒng)日志(系統(tǒng)運(yùn)行錯(cuò)誤記錄等 log4net輸出的)
1喳挑、表結(jié)構(gòu)設(shè)計(jì)
2 程序設(shè)計(jì)
我還是采用mvc4.0 + web api + easyui + knockout去實(shí)現(xiàn)。實(shí)際上之前我就實(shí)現(xiàn)的差不多滔悉,最近也一直在花時(shí)間更新完善伊诵。
這個(gè)權(quán)限系統(tǒng)太大了,這一篇肯定是說不完的回官,我這里就先總體上說了一下設(shè)計(jì)思路曹宴,接下每一篇寫具體實(shí)現(xiàn),一篇一個(gè)功能孙乖,大家期待我的下一篇吧。
3份氧、UI設(shè)計(jì)
不多說了唯袄,先上圖吧,我在第一篇博客中貼過以前的版本蜗帜,最近也有一些更新恋拷,再貼一次吧,這次截圖比較詳細(xì)點(diǎn)厅缺,也配了一些文字的說明介紹蔬顾。
功能1:菜單導(dǎo)航
【菜單導(dǎo)航】1:包括新增修改刪除功能宴偿,直接在grid中編輯
【菜單導(dǎo)航】2:選擇圖標(biāo)
【菜單導(dǎo)航】3:選擇頁面按鈕 定義這個(gè)功能有只些按鈕
【菜單導(dǎo)航】4:管理按鈕庫(kù) 增刪改
功能2:組織結(jié)構(gòu)【組織結(jié)構(gòu)】1:圖形化的樹結(jié)構(gòu),可以新增編輯刪除節(jié)點(diǎn)
【組織結(jié)構(gòu)】2:編輯節(jié)點(diǎn)
【組織結(jié)構(gòu)】3:設(shè)置角色
功能3:授權(quán)代碼
【授權(quán)代碼】樹形grid 可以增添編輯刪除
功能4:角色管理【角色管理】1:直接在grid中 增添編輯刪除
【角色管理】2:點(diǎn)編輯權(quán)限彈出角色極限窗口诀豁,點(diǎn)擊選擇菜單權(quán)限
【角色管理】3:編輯按鈕權(quán)限窄刘,grid中只會(huì)出現(xiàn)菜單權(quán)限中選中的行,每個(gè)功能有哪些按鈕在菜單中已定義好舷胜,這里只要勾選按鈕即可
【角色管理】4:編輯數(shù)據(jù)權(quán)限 可以多選娩践,但只有一個(gè)默認(rèn)值,該角色新增的業(yè)務(wù)單據(jù)的授權(quán)代碼為默認(rèn)的授權(quán)代碼烹骨。
【角色管理】5:編輯字段權(quán)限 grid中只會(huì)出現(xiàn)菜單權(quán)限中選中的行翻伺,直接在允許或拒絕中輸入字段名,多個(gè)字段用逗號(hào)隔開
【角色管理】6:點(diǎn)擊管理成員沮焕,彈出此窗口
【角色管理】7:成員管理 點(diǎn)擊添加按鈕
功能5:用戶管理【用戶管理】1:左邊機(jī)構(gòu)可以過濾吨岭,直接在grid中增刪改查用戶
【用戶管理】2:設(shè)置機(jī)構(gòu) 可多選,這里機(jī)構(gòu)錄入的太多了峦树,出現(xiàn)了滾動(dòng)條辣辫,少些會(huì)好看點(diǎn)。
【用戶管理】3:設(shè)置角色 可多選
【用戶管理】4:用戶設(shè)置 用戶登陸后的一些配置信息空入,比如指定用戶的桌面络它,默認(rèn)的項(xiàng)目,不同的系統(tǒng)可能會(huì)有不同的需求歪赢,所以這里設(shè)計(jì)可添加刪除的化戳,右上角下拉出來的[個(gè)人設(shè)置]頁面也指向這里的數(shù)據(jù)
功能6:數(shù)據(jù)字典【數(shù)據(jù)字典】1:左邊類別樹可過濾,左邊是樹形grid,可以有層級(jí)關(guān)系埋凯,直接在grid中編輯
【數(shù)據(jù)字典】2:點(diǎn)擊管理類別点楼,類別可在彈出的grid中增刪改查
功能7:系統(tǒng)參數(shù)
【系統(tǒng)參數(shù)】直接grid中編輯,設(shè)計(jì)了一個(gè)是否可編輯字段白对,只能編輯 是否可編輯為true的參數(shù)
功能8:操作日志【操作日志】1:登陸日志
【操作日志】2:業(yè)務(wù)操作記錄
【操作日志】3:系統(tǒng)日志
【操作日志】4:系統(tǒng)日志 查看系統(tǒng)日志
如果大家感興趣,就在右下角幫我【推薦】一下吧甩恼,謝謝大家了蟀瞧。我接下來就按照功能列表一篇一篇的來寫,下一篇就先開始寫菜單管理条摸。
這里整個(gè)系統(tǒng)都是采用我的zephyr.net框架開發(fā)悦污,應(yīng)用mvc4.0 webapi easyui knockoutjs開發(fā)的實(shí)現(xiàn)的。
----------
![關(guān)注我的公眾號(hào).jpg](http://upload-images.jianshu.io/upload_images/1428538-27b8b23065ed36aa.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)