基於原生PHP交叉會員許可權控制,交叉會員許可權控制_PHP教程

來源:互聯網
上載者:User

基於原生PHP交叉會員許可權控制,交叉會員許可權控制


對於一個網站的後台管理系統,單一的超級管理員權限往往不能滿足我們的需求,尤其是對於大型網站而言,這種單一的許可權會引發許許多多的問題出現。

比如:一個網站編輯,平時他只是負責公司網站的公告更新,但如果網站後台沒有嚴格的許可權限制,他是不是就可以操作到客戶的一些資訊,這是存在很大隱患的。

如果學過ThinkPHP架構的朋友一定知道有個東西叫RBAC,今天咱不說那個,來說說在原生PHP語言中,怎麼實現交叉許可權控制。

好了,話不多說,老樣子,直接說原理,上代碼。

對於許可權的交叉控制可以有很多種方法實現,這裡只是提供一種思路:(我採用的是位元的方法)

一、這裡先提下按位與和按位或的運算方法:

1、按位與運算子(&)

參加運算的兩個資料,按二進位位進行“與”運算。

運算規則: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、按位或運算子(|)

參加運算的兩個對象,按二進位位進行“或”運算。

運算規則: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 php 2     define('ADD',1);//二進位1 3     define('DELETE',2);//二進位10 4     define('UPDATE',4);//二進位100 5     define('SELECT',8);//二進位1000 6  7     //有許可權為1,沒有許可權為0 8     $admin=ADD|DELETE|UPDATE|SELECT;//1111 9     $editer=ADD|UPDATE|SELECT;//110110     $user=SELECT;//100011 ?>

我把增刪改查分別做成了4個許可權並定為常量

1的位元是1,2的位元是10,4的位元是100,8的位元是1000,這裡剛好成一個規律

可能有些朋友會問上面許可權變數admin,editer,user所對應的1111,1101,1000是怎麼來的?

PHP裡有一個十進位數轉位元的函數叫decbin()

下面是對應的函數解釋:

decbin(PHP 3, PHP 4, PHP 5)decbin -- 十進位轉換為二進位說明string decbin ( int number )

返回一字串,包含有給定 number 參數的二進位表示。所能轉換的最大數值為十進位的 4294967295,其結果為 32 個 1 的字串。 例子 1. decbin() 範例phpecho decbin(12) . "\n";echo decbin(26);?> 上例將輸出:110011010參見 bindec(),decoct(),dechex() 和 base_convert()。

我們來測試輸出看看吧:

 1 php 2      3      4     define('ADD',1);//二進位1 5     define('DELETE',2);//二進位10 6     define('UPDATE',4);//二進位100 7     define('SELECT',8);//二進位1000 8  9     //有許可權為1,沒有許可權為010     $admin=ADD|DELETE|UPDATE|SELECT;//111111     $editer=ADD|UPDATE|SELECT;//110112     $user=SELECT;//100013 14     echo decbin($admin)."
";15 echo decbin($editer)."
";16 echo decbin($user)."
";17 18 19 ?>

輸出結果:

那麼我們就可以運用這個運算來判斷許可權了,1代表有許可權,0代表無許可權

比如:

admin(超級管理員)擁有的許可權是增刪改查也就是1111——>0000 1111

editer(網站編輯)擁有的許可權是增,改,查也就是1101——>0000 1101

user(普通使用者)只擁有瀏覽、查詢的許可權也就是1000——>0000 1000

那麼我們只要對它們進行按位與運算就可以判斷是否具備許可權了

例如:

網站編輯許可權 0000 1101 | 0000 0010(刪除許可權十進位為2轉二進位為10)  結果:0000 0000 也就是沒有具備許可權

再來試試

普通使用者權限 0000 1000 |0000 0001(添加許可權十進位為1二進位為1)  結果:0000 0000 也一樣不具備許可權

超級管理員權限0000 1111 |0000 1101(網站編輯的許可權)  結果:0000 1111 也就是具備了網站編輯的許可權

好了看具體執行個體吧

我建了一個資料庫,裡面有2張表

一張是user使用者表:

gid代表許可權表的組id

一張是許可權表:

flag代表增刪改查的許可權,可根據自己需要定義

基本配置頁面:config.php

 1 php 2      3     define('HOST','localhost'); 4     define('DBNAME','member'); 5     define('USER', 'root'); 6     define('PASS', ''); 7  8  9     $link=@mysql_connect(HOST,USER,PASS) or die('資料庫連接失敗');10 11     mysql_select_db(DBNAME,$link);12 13     define('ADD',1);//二進位114     define('DELETE',2);//二進位1015     define('UPDATE',4);//二進位10016     define('SELECT',8);//二進位100017 18     //有許可權為1,沒有許可權為019     $admin=ADD|DELETE|UPDATE|SELECT;//111120     $editer=ADD|UPDATE|SELECT;//110121     $user=SELECT;//100022 ?>

登陸首頁:index.html

 1 DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 3 <head> 4     <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> 5     <title>Documenttitle> 6 head> 7 <body> 8     <form action="action.php" method="post"> 9         帳號:<input type="text" name="username" />10         密碼:<input type="password" name="password" />11         <input type="submit" name="submit" value="登陸">    12     form>    13 body>14 html>

提交頁面:action.php

 1 php 2      3     require_once('config.php'); 4     $username=$_POST['username']; 5     $password=$_POST['password']; 6  7  8     $sql="select * from user as a,role as b where a.gid=b.gid  9     and a.username='$username' and password='$password'";10 11     $result=mysql_query($sql);12     if($data=mysql_fetch_array($result)){13         //帳號驗證通過,判斷對應許可權14         //此處判斷的是 是否具備刪除許可權15         if($data['flag']&DELETE){16             echo "你有刪除許可權";17         }else{18             echo "你沒有刪除許可權";19         }20 21     }else{22         echo "錯誤帳號密碼";23     }24     25 26 ?>

如下:

輕鬆搞定~

這裡只是個簡單的小DEMO示範,希望能起到拋磚引玉的作用,至於具體項目還需具體分析,許可權控制畢竟是個很複雜的功能。


PHP中怎實現交叉會員?

不明白.,,...
 

php架構相對原生php影響性可以或效率

肯定會慢一點,但是這是可以接受的。因為採用架構造成的效能損失比較恒定,例如對於所有功能,使用架構和直編可能總是架構慢0.002毫秒。但是這種損失一般不需要在意。因為相對於架構的巨大好處,這種損耗是值得的。

利用架構可以大幅度提升開發效率
大幅度節約維護成本
更容易的項目交接

因此,寧可損失效率也選擇架構。關於效率可以考慮升級伺服器等手段來改善。

 

http://www.bkjia.com/PHPjc/860055.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/860055.htmlTechArticle基於原生PHP交叉會員許可權控制,交叉會員許可權控制 對於一個網站的後台管理系統,單一的超級管理員權限往往不能滿足我們的需求,尤其是...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.