Anuncios

Bienvenidos sean a este post, en el post anterior vimos el controlador de usuarios hoy veremos el de administracion.

Anuncios

Para esto iremos al directorio Controllers en el directorio app y crearemos un nuevo archivo llamado admin.php al cual le agregaremos el siguiente codigo:

admin.php

<?php

namespace App\Controllers;

use System\ControladorBase;
use App\Helpers\Sesion;
use App\Helpers\Url;
use App\Modelos\Usuario;

class Admin extends ControladorBase
{

}
Anuncios

Esta clase como en todas comenzaremos estableciendo el namespace, luego importaremos cuatro clases que fueron explicadas en los siguientes posts:

  • ControladorBase en este post.
  • Sesion en este post.
  • Url en este post.
  • Usuario en este post.
Anuncios

Por ultimo haremos que esta clase sea heredera de ControladorBase, con esto comentado pasemos a agregar la siguiente variable:

protected $usuario;
Anuncios

Este sera una variable que usaremos como objeto para almacenar los elementos relacionados a nuestro usuario, nuestro siguiente paso sera agregar el siguiente metodo despues de la variable anterior:

        public function __construct()
        {
                parent::__construct();
                $this->usuario = new Usuario();
        }
Anuncios

En este caso definimos a un constructor donde invocaremos al constructor padre y luego en la variable antes definida le asignaremos un nuevo objeto de la clase Usuario, pasemos a agregar el siguiente metodo:

        public function index()
        {
                if (!Sesion::get('logueado'))
                        Url::redireccionar('/admin/login');

                $titulo='Dashboard';
                $this->view->render('admin/index',compact('titulo'));
        }
Anuncios

Esta sera el metodo de index, primero investigaremos si no existe la sesion «logueado», en caso de ser verdadero usaremos el metodo redireccionar para enviarnos al metodo login, lo siguiente sera una variable para usar de titulo, por ultimo cargaremos la vista informada por medio de render, y por medio de compact enviamos el valor de la variable antes creada, esto ultimo se hace si entre las claves de la sesion existe «logueado» de lo cual hablaremos a continuacion agregando el siguiente metodo:

	public function login()
	{
		if (Sesion::get('logueado'))
			Url::redireccionar('/admin');

		$errores = [];

		if (isset($_POST['submit']))
		{
			$user = htmlspecialchars($_POST['usuario']);
			$pass = htmlspecialchars($_POST['clave']);

			if (password_verify($pass, 
				$this->usuario->get_hash($user)) == false)
			{
				$errores[] = "Usuario o clave incorrectas";
			}

			if (count($errores) == 0)
			{
				$datos = $this->usuario->get_data($user);
				Sesion::set('logueado',true);
				Sesion::set('id_usuario',$datos->id);
				Url::redireccionar('/admin');
			}
		}

		$titulo = 'Login';
		$this->view->render('admin/auth/login',
				compact('titulo','errores'));
	}
Anuncios
Anuncios

Este es el metodo mas importante porque sera el encargado de hacer la magia del ingreso del usuario, lo primero que haremos sera verificar la existencia de la clave logueado en la sesion, en caso de ser cierto nos redirecciona a la clase admin, lo siguiente sera definir un array vacio llamado errores, despues tenemos un condicional donde verificamos si tenemos un submit, en caso de ser verdadero procederemos primero a obtener los valores enviados por un formulario del usuario y la contraseña, en este caso usamos la funcion htmlspecialchars para convertir caracteres especiales en entidades HTML.

Anuncios
Anuncios

El siguiente paso sera verificar con un condicional si el resultado de la funcion password_verify es igual a false, esta funcion toma dos claves y compara los hash entre si y si los dos son iguales devolvera un true de lo contrario un false, si es false procede a almacenar un mensaje en el array errores, luego tenemos otro condicional donde verificamos si la cantidad de elementos en errores es igual a cero, en caso de ser verdadero significa que no hubo ningun error por lo procede a obtener todos los datos del usuario y los almacena en datos, luego establece la clave logueado, lo siguiente sera agregar otra con el id del usuario donde pasaremos el dato de id de la tabla y por ultimo redireccionamos a admin.

Anuncios

En caso de haber ocurrido algun error procede a salir de los condicionales, o mejor dicho sigue de largo, establece un valor para una variable llamada titulo, como vimos en el metodo index, y luego llama a render para mostrar la pagina de ingreso y enviar por medio compact el titulo y los errores que tuvimos, pero de esta vista hablaremos en otro post, por ultimo debemos agregar el siguiente metodo:

        public function logout()
        {
                Sesion::eliminar();
                Url::redireccionar('/admin/login');
        }
Anuncios

Este metodo simplemente cerrara la sesion, primero llamara a eliminar para eliminar la sesion y luego nos redireccionara nuevamente para «loguearnos», con esto comentado podemos pasar a ver el codigo hasta el momento:

admin.php

<?php

namespace App\Controllers;

use System\ControladorBase;
use App\Helpers\Sesion;
use App\Helpers\Url;
use App\Modelos\Usuario;

class Admin extends ControladorBase
{
	protected $usuario;

        public function __construct()
        {
                parent::__construct();
                $this->usuario = new Usuario();
        }

        public function index()
        {
                if (!Sesion::get('logueado'))
                        Url::redireccionar('/admin/login');

                $titulo='Dashboard';
                $this->view->render('admin/index',compact('titulo'));
        }

	public function login()
	{
		if (Sesion::get('logueado'))
			Url::redireccionar('/admin');

		$errores = [];

		if (isset($_POST['submit']))
		{
			$user = htmlspecialchars($_POST['usuario']);
			$pass = htmlspecialchars($_POST['clave']);

			if (password_verify($pass, 
				$this->usuario->get_hash($user)) == false)
			{
				$errores[] = "Usuario o clave incorrectas";
			}

			if (count($errores) == 0)
			{
				$datos = $this->usuario->get_data($user);
				Sesion::set('logueado',true);
				Sesion::set('id_usuario',$datos->id);
				Url::redireccionar('/admin');
			}
		}

		$titulo = 'Login';
		$this->view->render('admin/auth/login',
				compact('titulo','errores'));
	}

        public function logout()
        {
                Sesion::eliminar();
                Url::redireccionar('/admin/login');
        }
}
Anuncios

En resumen, hoy hemos establecido al controlador de administracion, este nos servira para ingresar a nuestra aplicacion, en este caso vimos todos los metodos para poder redireccionar al Dashboard, sino tambien al encargado del «logueo» y del «deslogueo», espero les haya gustado sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.50