2012-10-12 55 views
0

可能重复:
Constructor session validation for different functions防止重复码验证笨

框架:CI(笨)

情况

我有4页(控制器)即:

home login dashboard editprofile

ACCESS

  • 可以由所有类型的用户进行访问,登录或不是

  • 登录必须只能是访问,如果没有通过认证

  • 仪表盘和editprofile必须由学生(认证用户)

我有这个validatation我的控制器,这样访问:

if($this->session->userdata('isLoggedIn')){ 
    // stay here do the function 
} else { 
// leave this page 
    header('Location:'.base_url().'login'); 
} 

我在那function index(){}

但正如我开发的系统,为我创造更多的方法,更多的控制器,它变得混乱.. 你需要使用这个,你有一个方法

if($this->session->userdata('isLoggedIn')){ 
// stay here do the function 
} else { 
// leave this page 
header('Location:'.base_url().'login'); 
} 

每次,

我已经阅读了几个问题在stackoverflow ...唯一最好的答案是这样的:这里的链接

它说,我必须使用装饰模式...但我不清楚如何,我想做那。

+0

其他任何前缀[这是你所需要的。(http://stackoverflow.com/a/12486869/568884) –

回答

2

为每种类型的用户创建不同的基础控制器,然后您只需设置该语句一次。我们的用户控制器看起来是这样的:我们只想要登录的用户访问扩展User_Controller自动确保任何功能仅如果你已经登录

<?PHP 
class User_Controller extends MY_Controller 
{ 
function __construct() 
{ 
    parent::__construct();  
    if (!$this->session->userdata('is_logged_in')) { 
     $this->session->set_flashdata('message', "I'm sorry, but you must be logged in to view that page."); 
     redirect("/"); 
    } 
} 
} 

那么任何控制器,您需要将此保存到核心文件夹能够扩展它。

您还需要将此添加到您的配置。PHP有基本控制器比MY_

function __autoload($class) 
{ 
if(strpos($class, 'CI_') !== 0) 
{ 
    @include_once(APPPATH . 'core/'. $class . EXT); 
} 
} 
+0

感谢了,我认为这是真的回答。 –