天天看點

我的權限系統設計實作MVC4 + WebAPI + EasyUI + Knockout(一)

前言

之前的部落格一直都還沒寫到架構的實作及權限系統,今天開始寫我的權限系統,我以前做過的項目基本上都有權限管理這個子產品,但各個系統都會有一些不太一樣,有些簡單點,有些稍微複雜一點,一句話,我們做的系統都離不開這個權限系統。是以網上很多人嘗試做一個通用的權限系統,不評論他們做的怎麼樣,隻是說在網上能找到的直接能用的應該不多,适用的并且能內建到項目中的就更少了,是以還是考慮自己做一個,不一定很通用,但足夠自己用的權限系統。

二、需求分析

關于權限系統的文章網上多如牛毛,很多都是基于角色的通路控制(RBAC)設計。但是發現完全實作RBAC的理論其實不一定好用,我想做一款适合自己的。是以首先我們必要明确我們要去實作哪些東西。

1、權限資源

a.菜單權限 經理和業務員登陸系統擁有的功能菜單是不一樣的

b.按鈕權限 經理能夠審批,而業務員不可以

c.資料權限 A業務員看不到B業務員的單據

d.字段權限 某些人查詢客戶資訊時看不到客戶的手機号或其它字段

一、前言

    a.菜單權限  經理和業務員登陸系統擁有的功能菜單是不一樣的

    b.按鈕權限  經理能夠審批,而業務員不可以

    c.資料權限  A業務員看不到B業務員的單據

    d.字段權限  某些人查詢客戶資訊時看不到客戶的手機号或其它字段

2、使用者,應用系統的具體操作者,我這裡設計使用者是不能直接配置設定權限的,必須要配置設定一個角色,角色中再配置設定權限,如果某個使用者權限比較特殊,可以為他專門建一個角色來應用解決,因為如果使用者也可以配置設定權限系統就會複雜很多。

3、角色,為了對許多擁有相似權限的使用者進行分類管理,定義了角色的概念,以上所有的權限資源都可以配置設定給角色,角色和使用者N:N的關系。

4、機構,樹形的公司部門結構,國内公司用的比較多,它實際上就是一個使用者組,機構和角色N:N的關系,機構和使用者也設計成N:N的關系,也就是說有時候一個使用者可以從屬于兩個部門,這種情況在我們客戶需求中的确都出現過。

當然除了上面提到的主要對象還包括以下對象

5、菜單

6、按鈕 

7、授權代碼 以前我做的項目中控制資料權限有以下兩種:

    a.用部門編碼來控制,隻能查詢到自己所屬部門的資料

    b.用項目編碼來控制,隻能查詢到自己所屬項目的資料。

這樣就有一個問題,我到底要用什麼字段來控制資料權限呢,是以我們就設計了一個授權代碼,如果你是用機構來控制資料權限,那麼你可以把授權代碼建成跟機構一樣的樹,如果用項目編碼控制,可以把它建成項目樹,用其它字段控制都一樣,是以會比較靈活,也把機構或項目解放出來了。

8、資料字典

9、系統參數

10、日志查詢 登陸日志、記錄檔(xx人xx時間對xx對象做了xx操作 自定義的)、系統日志(系統運作錯誤記錄等 log4net輸出的)

三、設計實作

1、表結構設計

我的權限系統設計實作MVC4 + WebAPI + EasyUI + Knockout(一)

2 程式設計

我還是采用mvc4.0 + web api + easyui + knockout去實作。實際上之前我就實作的差不多,最近也一直在花時間更新完善。

這個權限系統太大了,這一篇肯定是說不完的,我這裡就先總體上說了一下設計思路,接下每一篇寫具體實作,一篇一個功能,大家期待我的下一篇吧。

3、UI設計

不多說了,先上圖吧,我在第一篇部落格中貼過以前的版本,最近也有一些更新,再貼一次吧,這次截圖比較詳細點,也配了一些文字的說明介紹。

功能1:菜單導航

【菜單導航】1:包括新增修改删除功能,直接在grid中編輯

我的權限系統設計實作MVC4 + WebAPI + EasyUI + Knockout(一)

【菜單導航】2:選擇圖示

我的權限系統設計實作MVC4 + WebAPI + EasyUI + Knockout(一)

【菜單導航】3:選擇頁面按鈕 定義這個功能有隻些按鈕

我的權限系統設計實作MVC4 + WebAPI + EasyUI + Knockout(一)

【菜單導航】4:管理按鈕庫 增删改

我的權限系統設計實作MVC4 + WebAPI + EasyUI + Knockout(一)

功能2:組織結構

【組織結構】1:圖形化的樹結構,可以新增編輯删除節點

我的權限系統設計實作MVC4 + WebAPI + EasyUI + Knockout(一)

【組織結構】2:編輯節點

我的權限系統設計實作MVC4 + WebAPI + EasyUI + Knockout(一)

【組織結構】3:設定角色

我的權限系統設計實作MVC4 + WebAPI + EasyUI + Knockout(一)

功能3:授權代碼

【授權代碼】樹形grid 可以增添編輯删除

我的權限系統設計實作MVC4 + WebAPI + EasyUI + Knockout(一)

功能4:角色管理

【角色管理】1:直接在grid中 增添編輯删除

我的權限系統設計實作MVC4 + WebAPI + EasyUI + Knockout(一)

【角色管理】2:點編輯權限彈出角色極限視窗,點選選擇菜單權限

我的權限系統設計實作MVC4 + WebAPI + EasyUI + Knockout(一)

【角色管理】3:編輯按鈕權限,grid中隻會出現菜單權限中選中的行,每個功能有哪些按鈕在菜單中已定義好,這裡隻要勾選按鈕即可

我的權限系統設計實作MVC4 + WebAPI + EasyUI + Knockout(一)

【角色管理】4:編輯資料權限 可以多選,但隻有一個預設值,該角色新增的業務單據的授權代碼為預設的授權代碼。

我的權限系統設計實作MVC4 + WebAPI + EasyUI + Knockout(一)

【角色管理】5:編輯字段權限 grid中隻會出現菜單權限中選中的行,直接在允許或拒絕中輸入字段名,多個字段用逗号隔開

我的權限系統設計實作MVC4 + WebAPI + EasyUI + Knockout(一)

【角色管理】6:點選管理成員,彈出此視窗

我的權限系統設計實作MVC4 + WebAPI + EasyUI + Knockout(一)

【角色管理】7:成員管理 點選添加按鈕

我的權限系統設計實作MVC4 + WebAPI + EasyUI + Knockout(一)

功能5:使用者管理

【使用者管理】1:左邊機構可以過濾,直接在grid中增删改查使用者

我的權限系統設計實作MVC4 + WebAPI + EasyUI + Knockout(一)

【使用者管理】2:設定機構 可多選,這裡機構錄入的太多了,出現了滾動條,少些會好看點。

我的權限系統設計實作MVC4 + WebAPI + EasyUI + Knockout(一)

【使用者管理】3:設定角色 可多選

我的權限系統設計實作MVC4 + WebAPI + EasyUI + Knockout(一)

【使用者管理】4:使用者設定 使用者登陸後的一些配置資訊,比如指定使用者的桌面,預設的項目,不同的系統可能會有不同的需求,是以這裡設計可添加删除的,右上角下拉出來的[個人設定]頁面也指向這裡的資料

我的權限系統設計實作MVC4 + WebAPI + EasyUI + Knockout(一)

功能6:資料字典

【資料字典】1:左邊類别樹可過濾,左邊是樹形grid,可以有層級關系,直接在grid中編輯

我的權限系統設計實作MVC4 + WebAPI + EasyUI + Knockout(一)

【資料字典】2:點選管理類别,類别可在彈出的grid中增删改查

我的權限系統設計實作MVC4 + WebAPI + EasyUI + Knockout(一)

功能7:系統參數

【系統參數】直接grid中編輯,設計了一個是否可編輯字段,隻能編輯 是否可編輯為true的參數

我的權限系統設計實作MVC4 + WebAPI + EasyUI + Knockout(一)

功能8:記錄檔

【記錄檔】1:登陸日志

我的權限系統設計實作MVC4 + WebAPI + EasyUI + Knockout(一)

【記錄檔】2:業務操作記錄

我的權限系統設計實作MVC4 + WebAPI + EasyUI + Knockout(一)

【記錄檔】3:系統日志

我的權限系統設計實作MVC4 + WebAPI + EasyUI + Knockout(一)

【記錄檔】4:系統日志 檢視系統日志

我的權限系統設計實作MVC4 + WebAPI + EasyUI + Knockout(一)

四、後述

如果大家感興趣,就在右下角幫我【推薦】一下吧,謝謝大家了。我接下來就按照功能清單一篇一篇的來寫,下一篇就先開始寫菜單管理。

這裡整個系統都是采用我的zephyr.net架構開發,應用mvc4.0 webapi easyui knockoutjs開發的實作的。

很多朋友私信我一些問題,是以幹脆我建立了一個技術交流QQ群:群一:328510073(已滿),群二:167813846,歡迎大家來交流。

繼續閱讀