基於原生PHP交叉會員許可權控制
對於一個網站的後台管理系統,單一的超級管理員權限往往不能滿足我們的需求,尤其是對於大型網站而言,這種單一的許可權會引發許許多多的問題出現。 比如:一個網站編輯,平時他只是負責公司網站的公告更新,但如果網站後台沒有嚴格的許可權限制,他是不是就可以操作到客戶的一些資訊,這是存在很大隱患的。 如果學過ThinkPHP架構的朋友一定知道有個東西叫RBAC,今天咱不說那個,來說說在原生PHP語言中,怎麼實現交叉許可權控制。 好了,話不多說,老樣子,直接說原理,上代碼。 對於許可權的交叉控制可以有很多種方法實現,這裡只是提供一種思路:(我採用的是位元的方法) 一、這裡先提下按位與和按位或的運算方法: 1、按位與運算子(&) 參加運算的兩個資料,按二進位位進行“與”運算。(“與”運算=>是否有包含的值如:7&8=0) 運算規則:0&0=0; 0&1=0; 1&0=0; 1&1=1; 即:兩位同時為“1”,結果才為“1”,否則為0 例如:3&5 即 0000 0011 & 0000 0101 = 0000 0001 因此,3&5的值得1。 另,負數按補碼形式參加按位與運算。 2、按位或運算子(|) 參加運算的兩個對象,按二進位位進行“或”運算。(“或”運算=>能包含的值如:7=4|2|1,用“異或”去除包含如:7^2) 運算規則:0|0=0; 0|1=1; 1|0=1; 1|1=1; 即 :參加運算的兩個對象只要有一個為1,其值為1。 例如:3|5 即 0000 0011 | 0000 0101 = 0000 0111 因此,3|5的值得7。 另,負數按補碼形式參加按位或運算。 瞭解了按位與和按位或的運算,我們來看下面這個例子: 複製代碼 1 複製代碼我把增刪改查分別做成了4個許可權並定為常量 1的位元是1,2的位元是10,4的位元是100,8的位元是1000,這裡剛好成一個規律 可能有些朋友會問上面許可權變數admin,editor,user所對應的1111,1101,1000是怎麼來的? PHP裡有一個十進位數轉位元的函數叫decbin() 下面是對應的函數解釋: 複製代碼decbin(PHP 3, PHP 4, PHP 5) decbin -- 十進位轉換為二進位說明string decbin ( int number ) 返回一字串,包含有給定 number 參數的二進位表示。所能轉換的最大數值為十進位的 4294967295,其結果為 32 個 1 的字串。 例子 1. decbin() 範例 上例將輸出:110011010參見 bindec(),decoct(),dechex() 和 base_convert()。 複製代碼我們來測試輸出看看吧: 複製代碼 1 ";15 echo decbin($editor)."
";16 echo decbin($user)."
";17 18 19 ?>複製代碼輸出結果: 那麼我們就可以運用這個運算來判斷許可權了,1代表有許可權,0代表無許可權 比如: admin(超級管理員)擁有的許可權是增刪改查也就是1111——>0000 1111 editor(網站編輯)擁有的許可權是增,改,查也就是1101——>0000 1101 user(普通使用者)只擁有瀏覽、查詢的許可權也就是1000——>0000 1000 那麼我們只要對它們進行按位與運算就可以判斷是否具備許可權了 例如:(從後往前看) 取十進位(資料庫儲存類型值)轉二進位進行"與"運算 網站編輯許可權 0000 1101(許可權十進位為13) & 0000 0010(刪除許可權十進位為2轉二進位為10) 結果:0000 0000 也就是沒有具備許可權 再來試試 普通使用者權限 0000 1000 & 0000 0001(添加許可權十進位為1二進位為1) 結果:0000 0000 也一樣不具備許可權 超級管理員權限0000 1111 & 0000 1101(網站編輯的許可權) 結果:0000 1101 也就是具備了網站編輯的許可權 好了看具體執行個體吧 我建了一個資料庫,裡面有2張表 一張是user使用者表: gid代表許可權表的組id 一張是許可權表: flag代表增刪改查的許可權,可根據自己需要定義 基本配置頁面:config.php 複製代碼 1 複製代碼 登陸首頁:index.html 複製代碼 1 2 3 4 5 Document 6 7 8 13 14 複製代碼提交頁面:action.php 複製代碼 1
http://www.bkjia.com/PHPjc/862109.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/862109.htmlTechArticle基於原生PHP交叉會員許可權控制 對於一個網站的後台管理系統,單一的超級管理員權限往往不能滿足我們的需求,尤其是對於大型網站而言,...