PHP專案許可權設定
以前開發的系統都是中小型系統,而且面向的多是業務固定的企業。因此,以前自己設計的許可權管理都是通過一張二維表表示的:
- id _in _read _write _dump _backup
- 1001 1 1 0 0 0
- 1002 0 0 0 0 0
- 1003 1 1 1 1 0
於是,一個小型矩陣就出現了,配合資料庫MySql中的相關欄位:
- id name gender acl email
- 1001 張三 男 11000 ok@ok.com
再寫一個readAcl類,每次根據具體的值得出相應的許可權。這是小打小鬧而已,因為:
1、資料大量冗餘
當資料多的時候,就是說系統使用人數多的時候,或者部門業務較多,表中列就有二三十行的情況下,就會產生浪費,引發資料庫反映變慢,究其原因在於這種方式太精細化了,可以控制每個人的每個活動。其實不需要這麼設定,因為很多人只有幾個專案有許可權,別的許可權相就都是0,如果真的發生了那樣的事情,呵呵,我們們看到的表會是一個處處是0,幾乎都看不見1的一個大表格。這不是浪費是什麼。
2、可擴充套件性差
資料冗餘就說明了,此處需要改進,而且那麼多重複資料,第一眼看去就想給他物件導向進行拆分進行重用,呵呵,可惜那是資料庫,雖不能物件導向,但可以拆表。其實,大家可以設想一下,如果這個公司業務發展情況良好,不久又兼併了一個新業務,那麼我們就得在這個大表中再新增添一個列,又出現N多個0和極少量的1。如果說這你可以容忍,那麼每次都對這個表增加列你還能容忍麼?增加列之後,人員資料表裡的acl欄位值你就必須每次都重寫一遍,因為之前是11000(五位),現在所有人都變為110000(六位),如果還有別的表也用到這個值呢?別忘了,你還得對PHP程式進行修改呢。
總之,你說麻煩不麻煩。
我靠,那怎麼辦?
是的,我也發愁ing。突然我想到了Linux,這可是可以一機帶超多個使用者的系統,它的許可權設計是按組來分的。靈感告訴我,這是個好點子。於是我檢視了Discuz和Joomla的使用者許可權設定,思路都是一樣:按組分配許可權。
萬歲,首先還是那張使用者表,可以固定欄位羅:
- id name gender group email
- 1001 張三 男 0 ok@ok.com
這張表裡變得更簡單了,就一個數,代表組ID。
接著設定組許可權表:
- id _in _read _write _dump _backup
- 0 1 1 1 1 1
- 1 0 0 0 0 0
- 2 1 1 0 1 0
如果遇到需要新增業務的話,直接對組許可權表增加列即可,並不影響別的表。
接下來就是一個簡單的組員表了。
- gid id
- 0 1001
- 0 1003
- 1 1129
- …………
這種做法在遇到超大量資料時都沒有問題。關鍵是極好地解決了許可權分配問題。其實看起來是種樹狀結構:
- groupA:
- 張三
- 李四
- groupB:
- 王五
- 趙六
- 陳七
- groupC:
- 周八
這一點,就寫到這吧。
相關文章
- 選單許可權和按鈕許可權設定
- ubuntu 許可權管理設定Ubuntu
- openGauss 設定檔案許可權安全策略
- 小程式許可權設定(位置)
- Linux 如何設定特殊許可權?Linux
- Django實戰1-許可權管理功能實現-02:專案設定Django
- win10 建資料夾許可權方法 如何設定windows10檔案許可權Win10Windows
- 金山文件怎麼設定編輯許可權 金山文件線上編輯許可權設定
- linux 檔案許可權 s 許可權和 t 許可權解析Linux
- Linux 筆記分享八:檔案許可權的設定Linux筆記
- Vue設定許可權列表目錄Vue
- PostgreSQL物件許可權如何在後設資料中獲取-許可權解讀、定製化匯出許可權SQL物件
- 【專案實踐】一文帶你搞定頁面許可權、按鈕許可權以及資料許可權
- NAS使用者許可權的設定
- saas-export專案-RBAC許可權模型Export模型
- win10怎麼設定防火牆許可權_win10電腦防火牆許可權如何設定Win10防火牆
- Linux的檔案存取許可權和0644許可權Linux
- 許可權設計
- [BUG反饋]許可權條目中缺少兩個公開方法的許可權設定
- windows10許可權怎麼設定_win10設定使用者許可權的方法WindowsWin10
- Linux 檔案許可權Linux
- Linux檔案許可權Linux
- windows10管理員許可權怎麼設定_win10電腦設定管理員許可權的步驟WindowsWin10
- win10 資料夾許可權怎麼設定_win10如何設定資料夾訪問許可權Win10訪問許可權
- win10安裝檔案沒有許可權怎麼設定Win10
- 許可權系統:許可權應用服務設計
- Android平臺targetSdkVersion設定及動態許可權Android
- drf 許可權校驗設定與原始碼分析原始碼
- SharePoint Online 站點模板中許可權的設定
- .Net Core JWT 動態設定介面與許可權JWT
- 許可權維持專題:作業系統許可權維持作業系統
- 許可權維持專題:域控制器許可權維持
- Hyperf 完整專案-1-jwt 許可權認證JWT
- 許可權系統:6個許可權概念模型設計模型
- 許可權系統:許可權應用服務設計Tu
- [svc]linux檔案許可權Linux
- chomd檔案許可權授予
- 許可權之選單許可權
- 『學了就忘』Linux許可權管理 — 55、檔案特殊許可權Linux