如何設計ERP系統的數據權限?
數據是一個企業最重要的資產。很多企業之間的競爭,其實也是數據之爭,資源之爭。數據權限,就如同為數據筑起的一座座城墻,清晰地劃分了用戶能看到的數據范圍,為數據提供安全保障。
01 問題闡述
你有沒有聽過這樣的例子:某企業的HR因為工作疏忽,泄露了公司員工的工資表,由此帶來一大堆麻煩。公司內的員工有因為工資少提出抗議的,更有直接離職的,而競爭對手也趁機大挖墻腳。不僅損失了人才,更是損壞了公司名譽,給公司帶來實際的損失。
而如果泄露的數據是企業的重要商業秘密,如客戶名單,則會給企業帶來致命的傷害。
這就是數據權限沒有控制好帶來的后果,很多人看到了不應該看到的數據。
反過來,企業員工如果沒有看到應該看到的數據,也會影響工作效率,甚至造成流程中斷。比如領導看不到下級的業績,就無法完成管理工作。
由此,數據權限的重要性可見一斑。如何更合理地管理數據權限,讓數據權限如人所愿?數據權限是不是控制得越細越好?甚至是直接針對每一個人去設置數據范圍呢?
02 解決方案
我們知道,企業是“鐵打的營盤,流水的兵”,員工調動/離職是很正常的。所以針對每一個人去維護權限,顯然是不合理的,后期的維護成本會很高。更合理的做法是針對崗位/角色設置權限。
針對應用場景的不同,有以下三種方案。
方案一
按照崗位體系建立數據權限。
把權限賦予崗位,再把員工(用戶)放在崗位上,從而間接把權限賦予用戶。
有的企業的數據權限很簡單,就是普通員工只能看到自己的數據,部門負責人可以看到本部門的數據,高層管理可以看到所有下級部門的數據。這樣可以把這套規則直接寫死在系統里面,然后根據員工的任職崗位和部門去讀取對應的數據范圍即可。
舉例:
張三是某公司的華南大區銷售經理,華南大區下面有深圳區域和廣州區域,這兩個區域部門各自有1個區域銷售經理和10個銷售員。為了避免區域之間的跨區銷售和惡性競爭,公司要求客戶信息和銷售訂單必須嚴格按照崗位體系來限制,每個銷售員只能看到自己的數據,上級可以看到下級的數據,下級不能看到上級的數據。同時所有人都只能看到自己部門的數據,不能看到其他部門的數據。
這時根據崗位體系的數據權限,我們可以把銷售訂單和客戶兩個單據錄入到崗位體系數據權限里面,則這兩張單據的數據范圍受崗位體系限制。每個人查看銷售訂單和客戶的時候,只能看到他所有下屬(包括他自己)的數據。
其他沒有錄入的單據,則不受崗位體系的限制,每個用戶都可以看到所有數據。
此方案的典型適用場景就是銷售管理系統、客戶關系管理系統(CRM)。
特點:數據權限的劃分嚴格按照員工崗位體系劃分。
優點:設置簡單,只需要錄入需要限制的單據,選擇是按照部門或者按照下屬來限制即可。
缺點:需要維護一套崗位體系;不夠靈活,無法查看跨部門的數據、上級領導的數據等。
也就是說,使用崗位體系數據權限只有兩種結果,要么受崗位體系限制,要么沒有限制(能看到所有數據), 其他需要限制但不是按照崗位體系限制的需求,則無法滿足。
比如有些集團中心的財務、人事等崗位,需要看到整個集團的數據,但是他們又不是集團領導,其他人也不是他們的下屬,這種情況崗位體系數據權限是滿足不了的。
我們提供更為靈活的方案二。
方案二
針對角色設置數據權限。
把權限賦予角色,角色疊加到用戶上,從而間接把權限賦予用戶。
角色和崗位相比,有兩個好處:1、崗位是在企業組織架構里面設立的,不能隨意修改,但是角色是可以靈活設置的,比如可以設置一個“華南大區報銷負責人”的角色,但是這個崗位在企業組織架構中不存在,所以不能設立這樣一個崗位。2、角色可以多個疊加,比如張三又負責華南大區的費用報銷,又負責華東大區的費用報銷,就可以把“華南大區報銷負責人”和“華東大區報銷負責人”兩個角色都賦予張三。但是崗位上張三是一個“報銷專員”,并沒有身兼多職。
所以,角色比崗位要靈活很多。
我們先引入一個概念:數據規則。
將單據中的每一個字段都作為一個數據權限對象,然后對這些字段設置比較條件,這些比較條件組合起來就形成一個針對該單據的數據規則。每一個數據規則有一個名稱。
比如,我們可以設置一個數據規則,條件是:客戶所在地區等于A,并且,客戶狀態為待續簽。那么這條數據規則就可以看到A地區待續簽的客戶,我們可以把它命名為“A地區待續簽”。
所以,數據規則其實是某張單據的一個數據范圍,也就是某部分的數據。
比較條件可以設置變量,比如客戶的業務員為“當前用戶對應的業務員”,更靈活更方便維護。
設置好數據規則之后,我們把這個數據規則跟角色關聯起來,就可以限制該角色能看到的數據范圍了。
如果不設置數據權限,則默認能看到所有數據。
如果有多個角色賦予同一個用戶,且不同角色的數據權限不同,則取范圍的并集。
?舉例:
張三和李四都是集團財務,張三負責華南和華東的費用報銷,李四負責華北和華中的費用報銷。
此時可以設置兩個角色:
- 角色 “華南和華東的報銷專員”,設置了數據規則為“報銷部門為華南 或 報銷部門為華東”,該角色賦予張三。
- 角色 “華北和華中的報銷專員”,設置了數據規則為“報銷部門為華北 或 報銷部門為華中”,該角色賦予李四。
此方案完美解決了方案一的問題,可以通過設置角色的權限來靈活地控制每一個用戶的權限,滿足很多特殊化的場景。缺點:1、需要維護用戶的角色;2、數據規則雖然可以用變量,如果是多層的計算邏輯,則無法滿足。
方案三
崗位數據權限和角色數據權限的結合。
方案二的數據規則雖然可以針對每個字段靈活設置,但是也有其局限性。數據規則只能設置簡單的變量,比如“報銷部門等于當前用戶的所屬部門”(“當前用戶的所屬部門”就是一個簡單的變量),如果變量需要經過多層邏輯計算,比如“當前用戶的所屬部門的下級部門”,則無法滿足。
也就是說,按照崗位體系來劃分數據權限的需求,方案二是滿足不了的??梢姡桨敢缓头桨付鋵嵤腔パa的關系。
企業的數據權限需求,無非就兩種,有些數據是基于崗位體系劃分數據權限的,有些數據是需要靈活設置的。所以我們把方案一和方案二結合起來,就形成了適用性更高的方案三。
此方案中,可以對角色設置崗位體系數據權限,同時還可以對角色設置其他的數據規則。也就是說,崗位體系數據權限和數據規則權限可以靈活切換、疊加來設置。
有的人可以只按照崗位體系數據權限來限制,有的人可以只按照數據規則來限制;有的人還可以又有崗位體系數據權限,又有數據規則權限。
如果同一角色同一單據,又設置了崗位體系數據權限,又設置了數據規則權限,則取兩者的交集。
舉例:
企業內所有員工都要使用費用報銷模塊,要求普通員工只能看到自己的數據,領導可以看到直屬下級的數據。同時集團的財務張三負責華南和華東的費用報銷,李四負責華北和華中的費用報銷。
此時可以設置三個角色:
- 角色“崗位費用報銷”,設置崗位體系數據權限,選擇直接下屬,并把角色賦予除張三和李四外的所有用戶。則這些用戶可以看到自己的數據及自己直接下屬的數據。(普通員工沒有下屬,只能看到自己的數據)。
- 角色 “華南和華東的報銷專員”,設置了數據規則為“報銷部門為華南 或 報銷部門為華東”,該角色賦予張三。
- 角色 “華北和華中的報銷專員”,設置了數據規則為“報銷部門為華北 或 報銷部門為華中”,該角色賦予李四。
普通員工和領導有崗位體系數據權限,財務張三和李四有數據規則數據權限。
方案三綜合了以上兩者的優點,更加靈活便捷。很少企業是完全按照崗位體系來劃分數據權限的,也很少企業所有的數據權限都可以用數據規則來限制,大多數是兩種需求都有的情況。所以方案三的適用性更好,更適用于全員應用的系統。
03 總結
方案都有好壞,主要是看不同的系統及企業權限管理需求。核心方案是:數據范圍劃分清晰、準確,設置靈活、維護成本低。
數據是一個企業最重要的資產。很多企業之間的競爭,其實也是數據之爭,資源之爭。數據權限,就如同為數據筑起的一座座城墻,清晰地劃分了用戶能看到的數據范圍,為數據提供安全保障。
本文由 @? 石頭_綠 原創發布于人人都是產品經理。未經許可,禁止轉載
題圖來自 Unsplash,基于 CC0 協議
怎么都是功能權限,不是數據權限啊
分成了功能權限和數據權限吧,數據權限又分成了崗位數據權限和規則數據權限
疑問:
1.方案一,在沒有數據規則的前提下怎么限制自己所能看到的數據(有的單據是有直接負責人,有的是通過類似區域的規則間接指定負責人)?
2.數據規則,對于單據是有直接負責人是否也要在數據規則中體現,設置單據負責人為“當前用戶”?
3.怎么實現權限數據的集合和情況,比如規定能看到某范圍的數據,但僅能操作此范圍中的一部分?
當企業組織結構發生調整了, 那數據權限怎么控制呢? 調整之前的部門的數據怎么處理呢?
同問??!組織結構頻繁變動時新舊數據如何處理,新數據權限如何調整?
請大佬回復下哇,這個問題沒找到好的方案
這種情況一般出現在做了組織結構集成的項目中,一般HR不是很懂信息化,不會考慮到下行系統怎么處理數據,一般分為兩種情況:(注:一般后臺如果有變動,系統可自己加一層判斷是否同步更新,不然容易被HR玩壞)
1 、人員變動:HR調整人員組織結構,從A部門調整到B部門(或者直接刪除A,在B部門給新建了一個身份),系統需要保證的是數據需要跟組織機構串走,不跟人走,原來部門起的數據歸口在原部門,但是被調動人員有查看權限,具體看系統怎么設計
2、部門變動:這種情況很少見,一般是改個部門名字或者新建部門在把人員調過去。。暫時未處理過這種情況,同求大佬解答
多謝,很有啟發,之前就被多任職的數據管理弄得不得行了
干貨滿滿
直接下屬和所有下屬有什么區別?方案一采用“所有下屬”,方案三采用“直接下屬”,但結果都一樣
直接下屬只有一層,所有下屬有多層。比如,總監的直接下屬是經理,經理的直接下屬是專員,總監的所有下屬是經理+專員。當然,對于沒有下屬或者只有直接下屬的員工來講,沒有區別。