如果管理员没有登录,我需要阻止访问管理员控制器中的其他方法。例如,如果我写了base_url / administration / show / index,我可以在不登录系统的情况下访问 Pleez帮助,Thx
登录控制器:
class Login extends CI_Controller{
function __construct(){
parent::__construct();
}
public function index(){
// Load our view to be displayed
// to the user
$this->load->view('admin/authentification_view');
}
public function process()
{
// Load the model
$this->load->model('login_model');
// Validate the user can login
$result = $this->login_model->validate();
// Now we verify the result
if(! $result){
// If user did not validate, then show them login page again
$this->index();
}else{
// If user did validate,
// Send them to members area
redirect('administration/show/index');
}
}
}
登录模式
class Login_model extends CI_Model{
function __construct(){
parent::__construct();
}
public function validate()
{
$login = $this->security->xss_clean($this->input->post('login'));
$password = $this->security->xss_clean($this->input->post('password'));
$this->db->where('login', $login);
$this->db->where('password', $password);
$query = $this->db->get('admin_details');
if($query->num_rows == 1)
{
// Creare date sesiuni
$row = $query->row();
$data = array(
'id' => $row->id,
'login' => $row->login,
'password' => $row->password,
'validated' => true
);
$this->session->set_userdata($data);
return true;
}
return false;
}
}
管理控制器
class Administration extends CI_Controller
{
function __construct()
{
parent::__construct();
$this->load->model('administration_page_model');
$this->load->model('crud');
$this->load->helper('url');
}
public function logout()
{
$this->session->sess_destroy();
redirect('login');
}
public function show($admin_page)
{
$data = array();
$data["news"] = $this->administration_model->allNews();
switch($admin_page)
{
case 'index':
$name = 'admin/index';
$this->display_lib->admin_page($data,$name);
break;
case 'add_news':
$name = 'admin/addnews';
$this->display_lib->admin_page($data,$name);
break;
case 'all':
$name = 'admin/all';
$this->display_lib->admin_page($data,$name);
break;
}
}
}
答案 0 :(得分:0)
最简单的分离是在application / core中定义以下类:
Base_Controller扩展了CI_Controller
- 一些基本的东西,设置变量等
Admin_Controller扩展了Base_Controller
- 集成您的逻辑/库,将用户确定为管理员
- 例如:If(!isAdmin) - >重定向登录
Auth_Controller扩展了Base_Controller
- 例如:If(!isLoggedIn) - >重定向登录
Front_Controller扩展了Base_Controller
- 不需要auth或admin,然后使用这个
答案 1 :(得分:0)
您可以简单地放入任何管理员控制器的构造函数:
function __construct()
{
parent::__construct();
if(!$this->session->userdata('validated')) redirect('login');
}
您还可以查看Ion_Auth插件(它管理身份验证,帐户等)。您只需要致电:
function __construct()
{
parent::__construct();
if(!$this->ion_auth->logged_in()) redirect('login');
}
答案 2 :(得分:-1)
如果用户已登录,则在cjeck中创建一个帮助函数check_login(),并在构造函数中为需要检查登录的每个类调用此帮助程序。
public function check_login(){
$ci = & get_instance();
if(!isset($ci->session->userdata['validated']))
{
//do what u want if user is not loogged in
//for example redirect('home page url');
}
}
现在在每个构造函数中添加此行
check_login();
要了解有关辅助函数的更多信息,请参阅
http://ellislab.com/codeigniter/user-guide/general/helpers.html