角色型存取控制RBAC

來源:互聯網
上載者:User

標籤:des   style   blog   http   color   使用   io   資料   

-------------------------------------------------------------------------------------------------------

RBAC(Role Based Access Control),意為角色型存取控制,這裡使用者不再擁有單獨許可權,而是與角色相關聯,通過賦予角色許可權,那麼該使用者也就擁有了這個角色的許可權; 這裡的角色可以也理解為使用者組。

 

許可權控制位置:在公用的控制器類的構造方法內,這樣子類均需進行許可權驗證; 登入註冊所在控制器可以不用繼承,以CI架構為例:包含登入的控制器直接繼承CI_Controller, 包含其他方法的控制器繼承MY_Controller進行許可權控制。

 

自訂的RBAC類,最終返回組裝的數組格式,參考如下:

$access_list = array(       ‘auth‘=>array(          ‘index‘=>array(              [0]=>‘index‘,              [1]=>‘add‘,          ),          ‘user‘=>array(              [0]=>‘index‘,              [1]=>‘add‘,              [2]=>‘delete‘,          ),        ),     );

[email protected]黑眼詩人 <www.chenwei.ws>----------------------------------

三步驟 實現RBAC =>

一,需要的5張資料表如下:

  使用者表

  角色表(使用者組)

  使用者和角色關聯表(便於存單個使用者存多個角色; 否則要在使用者表存roleid,多個值)

  許可權表(節點表:角色id,節點id,節點pid)

  角色與許可權關聯表

(4張表實現的RABC是採用的單角色思路,可以省略掉“使用者和角色關聯表”,將角色id直接存入使用者表,可以省掉一些代碼量)

 

二,通過使用者的id擷取所有的節點許可權:

1. 通過使用者的id將使用者的角色id查詢出來,function getRoleId(){}

2. 通過使用者的角色id來擷取所有的節點id,function getNodeId(){}

3. 通過所有的節點id來擷取節點名稱,組裝數組(也可存入session),function getNodes(){}  function getNodeName(){}

 

三,驗證許可權:

通過$_GET[‘c‘]和$_GET[‘m‘]與$access_list[‘auth‘]中的進行對比,如果存在,擁有許可權,否則無許可權,進行踢出; 這裡用到了函數array_key_exists()。

強調:登入退出在非公用的控制器內,不參與許可權控制。

 

如果有使用了Ajax,那麼同樣可以驗證,代碼局部如下:

/**
|---------------------------------------------
|開啟許可權控制方法(以CI架構為例)
|@黑眼詩人 <www.chenwei.ws>
|---------------------------------------------
*/
protected function openCheck(){  $this->load->library(‘rbac‘);       //載入rbac類  if( ! $this->rbac->access_check($id))  //rbac中access_check方法檢測許可權  {    if(isset($_SERVER[‘HTTP_X_REQUESTED_WITH‘]) && strtolower($_SERVER[‘HTTP_X_REQUESTED_WITH‘]) == ‘xmlhttprequest‘) { echo ‘您沒有許可權!‘;exit;     //Ajax請求傳回值 } else { redirect(‘admin/show_notice‘); //重新導向至提示頁 }  }}

你還可以在上述代碼中加入判斷,如:超級管理員角色不受限制,這樣更符合許可權系統的需求。

-------------------------------------------------------------------------------------------------------

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.