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:
- 周八
這一點,就寫到這吧。
相關文章
- Atitit godaddy 檔案許可權 root許可權設定Go
- 如何設定許可權?
- 選單許可權和按鈕許可權設定
- ubuntu 許可權管理設定Ubuntu
- java中怎麼設定檔案許可權Java
- [SAP BO]BOE的 檔案許可權設定
- Java實現許可權管理-專案設計Java
- 小程式許可權設定(位置)
- Windows許可權設定詳解Windows
- openGauss 設定檔案許可權安全策略
- Django實戰1-許可權管理功能實現-02:專案設定Django
- win10 建資料夾許可權方法 如何設定windows10檔案許可權Win10Windows
- 適配懸浮窗許可權與系統設定修改許可權
- Vista檔案/資料夾許可權設定。
- Vue設定許可權列表目錄Vue
- iOS 10設定應用許可權iOS
- linux 檔案許可權 s 許可權和 t 許可權解析Linux
- 金山文件怎麼設定編輯許可權 金山文件線上編輯許可權設定
- PostgreSQL物件許可權如何在後設資料中獲取-許可權解讀、定製化匯出許可權SQL物件
- Linux 筆記分享八:檔案許可權的設定Linux筆記
- Linux使用:檔案或目錄的許可權設定Linux
- 解讀Linux檔案許可權的設定方法(轉)Linux
- 【專案實踐】一文帶你搞定頁面許可權、按鈕許可權以及資料許可權
- NAS使用者許可權的設定
- Serv-U許可權設定規則
- win8.1最高許可權設定方法
- App跳轉到許可權設定介面APP
- SVN伺服器的許可權設定伺服器
- 如何檢測應用通知許可權?如何跳轉通知許可權設定頁?
- saas-export專案-RBAC許可權模型Export模型
- win10怎麼設定防火牆許可權_win10電腦防火牆許可權如何設定Win10防火牆
- 【LIUNX】目錄或檔案許可權,許可權授予
- [BUG反饋]許可權條目中缺少兩個公開方法的許可權設定
- Linux下Web目錄和檔案安全許可權設定LinuxWeb
- linux 批量設定資料夾755 檔案644許可權Linux
- apache+php 的匿名FTP功能目錄許可權設定問題(轉)ApachePHPFTP
- PowerDesigner版本控制器設定許可權
- Win8.1許可權獲取設定教程