權限模塊是ERP系統的核心模塊之一,完善的權限控制機制給系統增色很多。總結我接觸過的權限模塊,以享讀者。算法
ERP權限管理用一句簡單的話來講就是:誰 可否 作 那些 事。數據庫
文句 | 含義 | 說明 |
誰 | 部門+崗位職責 | 也能夠不與部門崗位綁定,省略角色定義。 |
可否 | 能(True) 否(False) | 用0或1,true/false表示可否執行 |
作 | 增長/刪除/修改/查詢/統計/打印/過賬 | 權限對象 |
哪些 | 通用的/本人的/本組別的/本部門的/本公司的/其餘的/多賬套的 | 範圍:行政部的辦公文具採購申請,PMC運行物料需求計劃產生採購部的物料採購計劃。 |
事 | 數據(如客戶、供應商、訂單、報表等) |
關於」可否」文句,支持組合拼接。好比有三個權限對象,分別是增長,刪除,修改。用戶A只有修改權限,用數字1表示有權限,則A用戶的權限字符串能夠表示爲001,這樣能夠知足動態增長權限對象的需求。安全
關於部門崗位職責,也就是一般說的角色(Role),由於角色的含義着重在於實際的業務理解,系統很難控制到這樣細節的地方,咱們的ERP系統省略了角色表,將權限與用戶直接綁定。框架
1) 系統權限 System Login 是否登入系統,能執行哪些模塊,能夠看到哪些操做菜單項。對沒有權限操做的界面應該隱藏或變灰,避免提示」對不起,您沒有權限」。ide
2) 功能權限 Module/Function 對模塊和功能可否有執行權限,功能是系統執行權限控制的基本單元。對模塊權限的操做,可批量設置模塊下功能的權限,程序最終進行判斷的地方仍是以功能權限爲依據。工具
2) 數據權限 Data/Field 對功能涉及到的數據是否有增刪查改的權限,可否編輯和查看相同單據其它用戶的數據,可否查看與編輯特殊字段的數據(字段權限),經常是指金額類字段。好比採購模塊的採購收貨與倉庫模塊的採購收貨,後者應該會隱藏與關聯的採購訂單中的物料價格信息。字段權限能夠與用戶或用戶組別綁定。優化
先設計用戶組別,對用戶組別分配權限,再建立用戶綁定到用戶組別。表與其字段定義:編碼
用戶組別(用戶組別編碼,已取消)加密
用戶組別模塊(用戶組別編碼,模塊編碼,模塊名稱,新增權限,刪權限除,修改權限,過賬權限,打印權限)spa
用戶組別模塊功能(用戶組別編碼,模塊編碼,功能編碼,新增權限,刪權限除,修改權限,過賬權限,打印權限)
用戶既能夠按照模塊批量增長權限,也可單獨的逐個功能增長權限。涉及字段權限的地方須要單獨設置。
1) 考慮多賬套(多數據庫)狀況下,受權的一致性。要求提取業務數據庫中的類似數據到框架數據庫中。
2)系統集成。須要考慮與LDAP/DBMS系統的集成性。與域集成時,能夠實現免登陸直接進入系統。當與其它數據庫集成時,根據須要設計各自的用戶提供程序,好比OracleUserProvider,MySQLUserProvider,分別實現鏈接到Oracle和MySQL數據庫中執行權限判斷。
3) 與硬件設備集成。執行權限判斷時自動識別硬件設備,好比Smart Card智能卡或加密狗。
4) 用戶密碼須要加鹽或是MD5加密,或是DES可逆算法加密。拒絕明文存儲密碼,密碼丟失後可用密碼重置功能重設密碼,考慮強密碼策略,包含字母數字和特殊字符組成的密碼。
5) 登陸限制,限制用戶必須在指定的區域(IP地址範圍,局域網子網,域)才能登陸使用。
6) 對沒有權限的功能,應該隱藏或是變灰,以解決權限難題。好比按鈕沒有變灰或隱藏,點擊按鈕後才進行權限判斷,提示」對不起,您沒有權限」,這類提示很不友好,應該要預先判斷權限。
7) 考慮用戶密碼過時,超過必定時間範圍後用戶必須修改密碼以增長安全性。
8) 管理員分配初始密碼時,考慮密碼生成工具,生成隨機字符串密碼,符合Windows強密碼供管理員使用。
ERP系統中有一些權限控制的地方,好比價格控制,信用控制,流程控制等。這些控制不在通用權限系統中考慮。
舉例說明,ERP系統中的用戶權限。
模塊 | 權限 | 說明 |
系統 | 可進入全部公司 | 不然只能進入指定的公司賬套 |
系統 | 可執行多賬套操做 | A公司的銷售單產生B公司的採購單 |
銷售 | 可以使用全部客戶 |
須要使用指定的客戶 |
銷售 | 容許關閉報價單 | 報價單關閉後不能再生成銷售單 |
銷售 | 隱藏銷售價格 | 銷售功能中隱藏價格字段 |
銷售 | 容許銷售單修改單價 | 銷售功能中不容許修改單價 |
銷售 | 銷售功能中執行價格下限控制 | 銷售功能中執行總金額控制,好比客戶A的信用上限20萬,向客戶A賣出貨物價值超過20萬時,單據沒法經過記賬或審覈。 |
採購 | 可以使用全部供應商 | 不然只能用指定的供應商 |
採購 | 收貨單不支持超額收貨 | 收貨單收貨數量爲100,是否支持收貨120個數量 |
採購 | 隱藏進倉成本 | 隱藏物料進倉價格(先進先出,平均成本) |
採購 | 隱藏採購價格 | 隱藏物料採購價格 |
這些參數控制分佈在ERP系統的各個模塊功能中,沒法實現抽象化設計。
以上設計中,硬性規定了七種權限,它們是增長,刪除,修改,查詢,統計,打印,過賬。若是要增長其它的權限則會涉及到比較多的改動。考慮將權限對象自己設計爲可動態增長的,好比我須要增長一個數據導出權限(Export),只須要在權限對象表中增長一行記錄,並分配能夠執行此權限的用戶或用戶組別,增長代碼判斷便可完成權限系統的開發。動態權限在大型管理系統中很常見,預先設計的固定的權限在實施時沒法知足實際需求時,考慮動態權限設計方法。
用友的系統就是把權限設計爲一個代碼,用一個表保存用戶具備的權限的代碼。
爲避免權限申請人與IT之間的信息溝通不順暢,定義權限申請批覈和生效流程。
由須要何種權限的用戶提出申請,填寫權限申請表單,選擇須要登入的模塊和功能,再經由用戶所在的部門負責人審批,權限審批經過後,由IT部門肯定,權限申請審批生效。
當用戶再也不須要登入系統或某種權限時,IT部門直接將用戶註銷或刪除相應的權限,避免審計問題。
買白菜時,一般爲了白菜價格是八毛仍是一塊與小販爭論不休,斤斤計較;買鑽石時,卻爲了追求好看,高貴,絕不在意鑽石的價格,只求貴的,好看的鑽石。 設計權限模塊以實用爲主,不追求過分設計,不追求更完美的設計。 能知足現有的客戶需求,對將來客戶增長鬚要不涉及太多的改動,這樣的權限系統設計就是合理合適的。