一种权限系统设计
一、前言
之前的博客一直都還沒寫到框架的實(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ū)徟?#xff0c;而業(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輸出的)
?
三、設(shè)計(jì)實(shí)現(xiàn)
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:管理按鈕庫 增刪改?
?
功能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)日志?
總結(jié)
- 上一篇: 2022第四届中国(山东)国际大健康产业
- 下一篇: upset图形如何理解