首先我們先定義4個(gè)常量來設(shè)定四種權(quán)限:
=====================================
	define(ADD,1);//增加數(shù)據(jù)庫記錄的權(quán)限
	define(UPD,2);//修改數(shù)據(jù)庫記錄的權(quán)限
	define(SEL,4);//查找數(shù)據(jù)庫記錄的權(quán)限
	define(DEL,8);//刪除數(shù)據(jù)庫記錄的權(quán)限
=====================================
接下來假設(shè)有3個(gè)用戶:
	A用戶擁有ADD-UPD-SEL-DEL四個(gè)權(quán)限,用位或運(yùn)算計(jì)算A的權(quán)限總值
	$a_all=ADD|UPD|SEL|DEL;//$all=15 可以注意到這個(gè)值和加法的結(jié)果是一樣的
	B用戶擁有ADD-UPD-SEL三個(gè)權(quán)限,用位或運(yùn)算計(jì)算B的權(quán)限總值
	$b_all=ADD|UPD|SEL;//$all=7 這個(gè)值和加法的結(jié)果又是一樣的
	C用戶擁有ADD-UPD兩個(gè)權(quán)限,用位或運(yùn)算計(jì)算C的權(quán)限總值
	$c_all=ADD|UPD;//$all=3 這個(gè)值和加法的結(jié)果還是一樣的
=====================================
	接下來我們用位與做運(yùn)算
	$a_all&ADD 結(jié)果為真
	$a_all&UPD 結(jié)果為真
	$a_all&SEL 結(jié)果為真
	$a_all&DEL 結(jié)果為真
=====================================
	$b_all&ADD 結(jié)果為真
	$b_all&UPD 結(jié)果為真
	$b_all&SEL 結(jié)果為真
	$b_all&DEL 結(jié)果為假
=====================================
	$c_all&ADD 結(jié)果為真
	$c_all&UPD 結(jié)果為真
	$c_all&SEL 結(jié)果為假
	$c_all&DEL 結(jié)果為假
=====================================
發(fā)現(xiàn)奧秘沒有?
1、當(dāng)權(quán)限總值和沒有的那個(gè)權(quán)限做位與運(yùn)算,結(jié)果為假
2、權(quán)限的值都是2的次方
知道了這兩點(diǎn)權(quán)限的處理就變得簡單了吧,只要在每次執(zhí)行涉及權(quán)限操作的時(shí)候把用戶當(dāng)前的權(quán)限總值和當(dāng)前操作需要的權(quán)限做位與運(yùn)算。如果結(jié)果為真執(zhí)行,為假做報(bào)錯(cuò)處理就行啦(當(dāng)然也不一定時(shí)報(bào)錯(cuò),你可以自己設(shè)計(jì)沒有權(quán)限時(shí)的程序)。
以上這篇PHP巧妙利用位運(yùn)算實(shí)現(xiàn)網(wǎng)站權(quán)限管理的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持VeVb武林網(wǎng)。
新聞熱點(diǎn)
疑難解答
圖片精選