2012-08-29 29 views
0

我是這個codeigniter的新手。我正在構建一個在用戶角色扮演重要角色的應用程序。在控制器中,我想檢查用戶是否具有特定的角色或權限,然後授予對函數的訪問權限。我想知道是否可以創建一個流程,以便我不需要檢查每個控制器的權限或角色,只有在擴展時才能完成此操作。我可以這樣做嗎?設計用戶權限檢查的方法

/** **更新/

我會怎麼辦,如果我想在一個控制器或僅在控制器的一些方法每種方法設置權限。

回答

4
<?php 
class Secure_area extends CI_Controller 
{ 

    function __construct($module_id=null) 
    { 
     parent::__construct(); 
     $this->load->model('Employee'); 
     if(!$this->Employee->is_logged_in()) 
     { 
      redirect('login'); 
     } 

     if(!$this->Employee->has_permission($module_id,$this->Employee->get_logged_in_employee_info()->person_id)) 
     { 
      redirect('no_access/'.$module_id); 
     } 

     //load up global data 
     $logged_in_employee_info=$this->Employee->get_logged_in_employee_info(); 
     $data['allowed_modules']=$this->Module->get_allowed_modules($logged_in_employee_info->person_id); 
     $data['user_info']=$logged_in_employee_info; 
     $this->load->vars($data); 
    } 
} 
?> 

把你首先要做好__construct每一件事....

+0

我們是否需要檢查會話中的任何事情? – Hacker

+0

的我們怎麼做? $ this-> Employee-> is_logged_in()(在'Empployee'模型中定義)將會查找userdata('some variable')的會話並返回'true'或'false'。 –

0

嗨,我開發了在那裏我遇到同樣的問題一個系統...如下因素是我的問題,存儲所有位指示名(或模塊中我的問題)

  1. 一個表的解決方案。 例如mod1 mod2 mod3 。 。存儲用戶訪問許可的所有控制器
  2. 一個表e.g USER1 MOD1 0 USER1 MOD2 1 USER1 MOD3 1 。 。 user2的MOD1 1 user2的模2 0 user2的量mod3 1

  3. 在文件中創建(secure_area.php EXTENDS是CI_Controller),檢查is_logged_in(){是:has_permission(){是:做的事情....繼續,沒有:重定向(權限被拒絕)},否:(重定向(登錄))}

  4. 而我所有的控制器擴展secure_area.php。

  5. 在管理區域中,您可以使用簡單的複選框來打包允許用戶使用的功能或表單。
+0

但在父類烏爾檢查權限。但在父母課堂上我不知道哪個控制器被稱爲儀式? – Hacker

+0

但子類正在擴展父類...即父類中的代碼是子類的一部分..基本上用於user1 .... www.example.com/index.php/mod1/function/arg ....將他重定向到權限被拒絕的頁面......但www.example.com/index.php/mod2/function/arg....將允許他訪問 –

+0

require_once(「secure_area.php」); mod1 EXTENDS secure_area –