我的受登录保护的成员区域有许多子部分和控制器。
为了检查用户是否已登录并允许其在那里,我只是将auth->is_logged_in()
方法放在每个控制器的构造函数中。
是否值得创建一个具有此检查功能的基本控制器,然后针对所有成员区域控制器进行扩展? (最佳做法?)
答案 0 :(得分:2)
我会在基本控制器上争辩。您也可以添加其他支票。
我建议您将其称为Secured_Controller(或类似的东西),使安全控制器的构造函数采用(可选)访问级别(因此您可以为刚刚登录的用户提供一些,有些用于管理员等)。 ..)
同时使其不需要访问级别(但提供gaurd方法,以便您可以在控制器中获取特定方法并让其他人自由运行。
示例:
管理控制器
class Admin_Controller extends Secure_Controller
{
public __construct()
{
parent::__construct(ACCESS_LEVEL_ADMIN);
}
}
部分安全控制器
class Partial_Controller extends Secure_Controller
{
public __construct()
{
parent::__construct();
}
public function Index()
{
$this->GaurdPermissions(ACCESS_LEVEL_ADMIN); // Would redirect if not enough permissions
}
}
答案 1 :(得分:1)
我为此创建了Auth库
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Auth
{
private $CI;
private $redirect;
function __construct()
{
$this->CI =& get_instance();
$this->redirect = 'home/login';
}
function _redirect($redirect, $rurl)
{
redirect(($rurl == '') ? $this->redirect : $rurl);
}
function check_login($redirect = FALSE, $rurl = '')
{
if($this->CI->session->userdata('logged') == TRUE) {
return TRUE;
}
$this->_redirect($redirect, $rurl);
}
function check_admin($redirect = FALSE, $rurl = '')
{
if($this->CI->session->userdata('user_type') == 'administrator') {
return TRUE;
}
$this->_redirect($redirect, $rurl);
}
}
?>
这个是用户控制器
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Users extends CI_Controller
{
function __construct()
{
parent::__construct();
$this->load->library('auth');
// second param is optional // will redirect if not admin //
$this->auth->check_admin(TRUE, 'admin/login');
}
希望这可以帮到你,让我们知道是否有什么...谢谢!!