Erro de session na validação de nível do usuário CodeIgniter

01/03/2015

Bom galera estou fazendo um painel simples mais com nível de usuário onde eu passo para a session uma array com três valores, até ai tudo bem, as funções que validam o formulário, valida o usuário do banco, se o usuário está logado ou não, função que recupera os dados da tabela validando pela session funcionam perfeitamente mais quando criei a função que valida o nível do usuário para redirecionar cada um para seu controller ele exibe o seguinte erro:
[img:descricao=erro mostrado em tela]http://i.stack.imgur.com/FRHAV.png[/img]

login_controller.php
function __construct()
{
    parent::__construct();
    $this->load->helper(array('form', 'url'));
    $this->load->library('form_validation');
    $this->load->model('login_model');
    $this->load->model('crud_model');
}

public function index(){
    $this->load->view('login_view');
}


public function logando()
{
    $regras = array(
                array(
                    'field' => 'usuario_login',
                    'label' => 'Usuário',
                    'rules' => 'trim|required|min_length[3]|max_length[32]'
                    ),
                array(
                    'field' => 'senha_login',
                    'label' => 'Senha',
                    'rules' => 'trim|required|min_length[6]|max_length[32]'
                    )
                );

    $this->form_validation->set_rules($regras);
    if($this->form_validation->run() != true || $this->login_model->validate() == FALSE){
        $this->load->view('login_view');
    }else{
        redirect('admin/admin_controller');
    } 
  } 
}


login_model.php
class Login_model extends CI_Model {

function validate()
{
    $campo['user'] = $this->input->post('usuario_login');
    $campo['pass'] = $this->input->post('senha_login');

    $where = array(
            'login_user'    =>  $campo['user'],
            'senha_user'    =>  md5($campo['pass']),
            'status_user'   =>  '1'
        );

    $this->db->where($where);
    $query = $this->db->get('usuarios');

    if($query->num_rows == 1)
    {
        $row = $query->row_array();//PEGA OS DADOS DO USUARIO COMPARADO COM OS CAMPOS

        $sess_validate  =   array(
            'session_logada'    =>  TRUE,//SE ELES ESTÁ LOGADO OU NÃO
            'session_user'      =>  $row['login_user'],//O NOME DE USUÁRIO QUE VEM DO BANCO
            'session_nivel'     =>  $row['nivel_user']//O NÍVEL QUE VEM DO BANCO
        );

        $this->session->set_userdata($sess_validate);

        return TRUE;

    }else{
        $this->session->set_flashdata('user_erro_model', 'Usuário inexistente ou inativo');
        redirect(current_url());
        return FALSE;
    }
}

public function is_logado()
{
    if (trim($this->session->userdata('session_logada')) != TRUE)
    {
        redirect(index_page());
    }
}

public function is_nivel()
{
    if($this->session->userdata('session_nivel') == 1){
        redirect('admin/admin_controller');
    }else{
        redirect('user/user_controller');
    }
}

public function is_dados_user()
{
    $sess['user'] = $this->session->userdata('session_user');

    $where = array(
            'login_user'    =>  $sess['user']
        );

    $this->db->where($where);
    $query = $this->db->get('usuarios');

    $row = $query->row_array();

    if($query->num_rows > 0) return $row;

  } 
}


admin_controller.php
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Admin_controller extends CI_Controller
{
function __construct()
{
    parent::__construct();
    $this->load->model('login_model');
    $this->login_model->is_logado();
    $this->login_model->is_nivel();
    $this->login_model->is_dados_user();
}


user_controller.php
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class User_controller extends CI_Controller {

function __construct()
{
    parent::__construct();
    $this->load->model('login_model');
    $this->login_model->is_logado();
    $this->login_model->is_nivel();
    $this->login_model->is_dados_user();
}

public function index()
{
    $this->load->view('user');
}

public function sair()
{
    if($this->session->userdata('session_logada') == FALSE){
        redirect(index_page());
    }else{
        $this->session->sess_destroy();
        redirect(index_page());
    }
}

}

/* End of file user_controller.php */
/* Location: ./application/controllers/admin/user_controller.php */


Já tentei mudar as configurações do wamp server e nada

PHP

Japa

Melhor resposta

02/03/2015

retire o direcionamento, para o caso em que a validação da session de falso. e teste.

Outro ponto, você tem alguma função no controller da index que valide se existe uma session valida, evitado que o usuario faça dois login?, caso sim, pode ser o motivo do loop.

Din

Responder Citar

Outras Respostas

02/03/2015

Japa

retire o direcionamento, para o caso em que a validação da session de falso. e teste.

Ele faz o login normalmente mas o usuário pode acessar o painel do administrador e vice-versa

Outro ponto, você tem alguma função no controller da index que valide se existe uma session valida, evitado que o usuario faça dois login?, caso sim, pode ser o motivo do loop.

Na index apenas tenho uma função que valida se o usuário está logado, caso retorne TRUE ele redireciona pai o painel novamente
<?php 
	if($this->session->userdata('session_logada') == TRUE) redirect('admin/admin_controller');
?>
Responder Citar