- Desde
- 24 Jun 2013
- Mensajes
- 96
Que tal, estoy aprendiendo a usar CodeIgniter , en el manual vi para que sirve los Hooks, y se me ocurrio una idea y es para agregar una funcionalidad de seguridad para acceso a paginas restringidas.
Es decir antes cuando programaba todo desde cero en PHP , cuando creaba un sistema de login de usuarios para impedir el acceso a una pagina restringida agregaba una capa de seguridad mediante un archivo que lo incluia en cada pagina que tenia que ser restringida, de esta manera se validaba si existia la session y lo dejaba entrar o lo redireccionaba a una pagina de login, mediante hooks me parecio bueno usar el pre_controller_construct que es cuando se ejecuta un controlador pero sin cargar ningun metodo, entonces en ese momento es para chequear si esta logeado o no, pero tengo un problema, esta validacion es para toda la aplicacion inclusive para el mismo formulario de login, entonces no me sirve , podria fijarme que solo para el formulario de login no haga la validacion, pero asi y todo tampoco me sirve ya que no solo la pagina de login tendria que estar excenta sino muchas otras mas .
Este es el codigo que tengo en Hooks.php en la carpeta config :
en la carpeta hooks cree un archivo login.php el cual tiene un metodo validar_login() que chequea si existe la session.
En este codigo basicamente lo que chequeo es que la session exista, y hago la salvedad que en caso de que se trate del login no lo haga.
Pero no pudo hacer un IF por cada pagina que quiero dejar excenta de esta validacion .
Mi pregunta es si hay alguna manera de elegir que paginas validar y cuales no de una manera mejor, o si simplemente tengo que volver a validar mediante un metodo en cada pagina que quiera restringir?
Espero que se haya entendido, sino trataré de explicarme mejor.
Saludos.
Es decir antes cuando programaba todo desde cero en PHP , cuando creaba un sistema de login de usuarios para impedir el acceso a una pagina restringida agregaba una capa de seguridad mediante un archivo que lo incluia en cada pagina que tenia que ser restringida, de esta manera se validaba si existia la session y lo dejaba entrar o lo redireccionaba a una pagina de login, mediante hooks me parecio bueno usar el pre_controller_construct que es cuando se ejecuta un controlador pero sin cargar ningun metodo, entonces en ese momento es para chequear si esta logeado o no, pero tengo un problema, esta validacion es para toda la aplicacion inclusive para el mismo formulario de login, entonces no me sirve , podria fijarme que solo para el formulario de login no haga la validacion, pero asi y todo tampoco me sirve ya que no solo la pagina de login tendria que estar excenta sino muchas otras mas .
Este es el codigo que tengo en Hooks.php en la carpeta config :
PHP:
$hook['post_controller_constructor'] = array(
'class' => 'Login',
'function' => 'validar_login',
'filename' => 'login.php',
'filepath' => 'hooks'
);
en la carpeta hooks cree un archivo login.php el cual tiene un metodo validar_login() que chequea si existe la session.
PHP:
<?php
if (!defined( 'BASEPATH')) exit('No direct script access allowed');
class Login
{
private $ci;
public function __construct()
{
$this->ci =& get_instance();
!$this->ci->load->library('session') ? $this->ci->load->library('session') : false;
!$this->ci->load->helper('url') ? $this->ci->load->helper('url') : false;
}
public function validar_login()
{
if($this->ci->uri->segment(1) == 'login' && $this->ci->session->userdata('id') == true)
{
redirect(base_url('inicio'));
}else if($this->ci->session->userdata('id') == false && $this->ci->uri->segment(1) != 'login')
{
redirect(base_url('login'));
}
}
}
En este codigo basicamente lo que chequeo es que la session exista, y hago la salvedad que en caso de que se trate del login no lo haga.
Pero no pudo hacer un IF por cada pagina que quiero dejar excenta de esta validacion .
Mi pregunta es si hay alguna manera de elegir que paginas validar y cuales no de una manera mejor, o si simplemente tengo que volver a validar mediante un metodo en cada pagina que quiera restringir?
Espero que se haya entendido, sino trataré de explicarme mejor.
Saludos.