許可權系統真的很難實現嗎? 開源軟體誕生11

2022-07-04 12:18:10 字數 1723 閱讀 1939

用日誌記錄「開源軟體」的誕生

碼雲:github:

【您的鼓勵,我的動力,乙個老程式設計師的心聲】

幾乎每家公司的erp管理系統裡都存在許可權系統的身影,而且實現方式多種多樣,配置流程千奇百怪。甚至在一家公司裡見到過幾百頁的許可權系統需求文件。許可權系統實現起來很困難嗎?我不置可否,下面就來一起抽絲剝繭。

許可權系統乍聽起來好像很深奧,其實可以很簡單:它是乙個管理誰有權看哪些內容、做哪些事的系統。好吧,貌似我一句話說完了,其實本節可以結束了。如果覺得我解釋得太少的同學,我再多說兩句。

(1)任何應用系統中的功能,絕對不是任何人都可以無限制使用的,我們一定是想做一些控制,來實現拆分、隔離、安全、高效等多方面的管控。許可權系統應運而生。

(2)要控制的物件是人。所以許可權系統必選先管人,我們通常叫做賬戶,乙個人乙個賬戶。而人又不是獨立存在的,人存在於組織裡,所以我們也要管組織。

(3)人要做的是事。我們關心的是,乙個人可以看哪些,做哪些,甚至是看到哪些資料。緊接著就是我們如何將事分類,並最終賦給人身上。

需要注意的是:許可權系統只需關心上面的內容,至於如何將許可權整合應用,以及更加業務化的問題,完全不必要進行考慮。

說到實現方式,我見過複雜的,也見過極簡的,下面從模組的角度列舉一下。

一、極簡版:使用者與許可權。

這種方式開發起來簡單,但配置起來極其複雜,也會出現很多意想不到的問題和風險。

二、通用版:使用者、角色、許可權。

這種方式應該是我們最常見到的,中間加了角色一層,解決了配置複雜度的問題。【赤龍erp】就是這個版本進行優化而來。

三、高階版:使用者、職責、許可權、選單、工具欄、可執行

這種方式是我遇到的比較科學的設計方式,幾乎可以說是涵蓋了所有常見的需要許可權管理的內容,優點當然是靈活,但也極大增加了開發成本和管理成本。

四、其他:使用者、使用者組、角色、許可權、選單

這種方式可以理解成通用版的乙個進化版本,更多的考慮的是配置的靈活度,也不像高階版那麼複雜,筆者之前企業中用的這種方式,總結一下,這種設計思路是好的,但在實踐中貌似多慮了。

下面就在具體講述一下,我在【赤龍erp】中的許可權系統是如何實現的。

(1)使用者管理:在這裡我只管理賬戶和密碼,不管理其他任何使用者的資訊和職員的資訊。不把登陸賬號和其他使用者資料做強耦合,這樣可以更加靈活的管理使用者。

(2)角色管理:角色是一組許可權的集合,但絕不是無場景的組合。角色一定是從業務角度出發的一類職責所涉及到的許可權的彙總。

(3)許可權管理:首先是對許可權的分類,即上面提到的對"事"的分類。常見的三類是:選單許可權、操作許可權和資料許可權。其次也是最重要的叫做約定。開發上有乙個思路叫約定大於配置。我們現在要做的就是如何通過約定許可權命名的方式,來實現無特殊配置和程式設計的許可權控制。也就是說,我們並不通過配置和編碼的方式來實現:誰能看到哪些選單,誰能操作哪些功能、誰能看到哪些資料,而是約定一系列規則,通過規則來判斷擁有哪些許可權的人可以做哪些事情,那麼在符合規則的前提下,我們只需要命名我們需要的許可權即可。

特殊說明:這也就是為什麼在我的許可權系統設計時並不需要高階版的那些選單管理、工具欄管理、可執行管理等功能

(4)關聯關係:使用者與角色、角色與許可權。首先關聯一定是多對多。最終的目的是找到使用者有哪些角色,使用者有哪些許可權;因為最終請求的攔截一般都是通過角色和許可權完成的。但設計時一定要避免過多的關聯重複,以及考慮到許可權範圍大小的設定問題。

做人真的很難

做人真的很難,每天都匆匆的來,匆匆的去,沒有目標的生活如同殭屍一般,沒有靈魂。人為了什麼活在這個世界上,想想真的不知道,為了理想?為了愛情?還是為了死亡?這誰也說不清楚,有人說我是為了理想,對,沒錯,我承認人為了理想而生存,但是人的最終歸宿還是死亡,死亡意味著一切都結束了,你再有理想,最終還是一切成...

變強真的很難麼?

做出這個決定,感到深深的無力感。感覺時間太長了些,平以往的經驗,我認為我做不到的。但是我真的想堅持一次。現在實驗室的人太多了,要踢掉8個人,我感覺我在黑名單之內,所以我要通過實力把自己從黑名單里拉出來。原計畫從六月一日,到七月一日奮鬥乙個月,但是感覺並不能說明什麼。糾結了一上午,考慮要不要一直堅持飽...

北漂真的很難

昨天我的乙個同學給我說,要回老家了,不回來了,聽了心裡真的有點替他難受 北漂其實真的挺難得,對於外來人員來說都想在北京這塊地上好好的撈一把,可是有幾個能很順利的實現自己當時來京城之前的打算呢,說是北京工作機會多 其實現在看看還有很多北漂人都沒找到工作呢,我的兩個同學找了n個月的工 作沒有找到,最後還...