Category Archives: cakephp

Tips: Permiso sudo a www-data

Tengo que ejecutar un script bash en php usando la función system(), el script debe mover un archivo a una unidad NAS previamente montada via cifs. Para evitar los problemas de permisos agregué al usuario www-data en la lista de sudo y santo remedio.

sudo visudo


# User privilege specification
root ALL=(ALL) ALL
www-data  ALL=(ALL) NOPASSWD: ALL

Leer archivo mdb (access) de php en ubuntu

Por motivos de trabajo tengo que leer/escribir archivos de MS Access (*.mdb) utilizando PHP. Después de leer varios foros y documentos les dejo la solución que encontré.

Primero debemos instalar algunos software.


sudo aptitude install php5-odbc mdbtools libmdbtools libmdbodbc

Luego deben editar los siguientes archivos /etc/odbcinst.ini y /etc/odbc.ini


[MDBToolsODBC]
Description = MDB Tools ODBC drivers
Driver = /usr/lib/libmdbodbc.so.0
Setup =
FileUsage = 1
CPTimeout =
CPReuse =

En este archivo deben indicar el path del archivo .mdb que desen leer.


[DSS]
Description = DSS-TMP
Driver = MDBToolsODBC
Database = /home/stefano/DSS/DB.mdb

Luego para probar si la conexión esta correcta en la consola deben escribir


stefano@arda:~$ isql DSS

Y aparecerá un mensaje indicando que ya están conectados a su base de datos. Ahora sólo queda leer el archivo desde PHP para eso pueden usar el siguiente snippet.


".odbc_result($result,"TABLE_NAME");
}
?>

CakePHP: Utilizar NOW() en saveField()

Durante el desarrollo de la nueva versión de buscopension.com me ha surgido un pequeño problema el cual es: Como poder actualizar un campo de una tabla utilizando el método saveField() de los modelos de cakephp.

Después de una pequeña búsqueda en google encontré la solución:


//app_model.php
function now() {
return strftime('%Y-%m-%d %H:%M:%S', time());
}

//model o controler
$this->saveField('activate_date',$this->now());

CakePHP: Mini control de acceso

Hoy comencé a trabajar sistema utilizando CakePHP en el cual necesito un control de acceso para distinguir entre dos usuarios, un administrador y un usuario normal, no quise usar ACL debido a lo básico de necesidad así que me puse a desarrollar mi propio sistema de control de acceso, con una pequeña variante en el software.

La solución es la siguiente:

En mi app_controller.php

    function beforeFilter() {
        if($this->Session->check("Auth.User")) {
            if($this->_permisos($this->params,$this->Session->read("Auth.User.group_id")) == false) {
                $this->Session->setFlash("No tienes permiso para ingresar a esta area");
                $this->redirect("/");
            }
        }
    }
    function _permisos($params,$group) {

        $normal_permitido = array(
            'users' => array(),
            'tickets'=>array('add','view','index'),
            'comments'=>array('add','view','index'),
            'groups' => array(),
            'types' => array(),
            'subareas' => array(),
            'areas' => array(),
            'pages' => array('display')
        );

        if($group != 1) {
            if(array_key_exists($params["controller"],$normal_permitido)) {
                if(in_array($params["action"], $normal_permitido[$params["controller"]])) {
                    return true;
                }
                else {
                    return false;
                }
            }
            else {
                return false;
            }
        } else {
            return true;
        }
        

    }

La idea es super simple si el usuario no es administrador solo podrá acceder a ciertas acciones los controladores. En el arreglo $normal_permitido se almacenan los controladores y las acciones que tiene permitido visitar.

Ojala les sirva.

Happy baking!

Nuevo proyecto buscopension.com

Finalmente he terminado la version beta de mi proyecto buscopension.com (actualmente la url es http://beta.buscopension.com), la idea de este proyecto es facilitar la vida a las personas que están en busca de una pension (en un principio dentro de la ciudad de Concepción), el concepto es simple cada dueño de pension agrega su pension utilizando el mapa (previo registro) y luego todos los visitantes podrá buscar una pension utilizando el mapa o simplemente señalando cerca de que lugar quieren ubicar una pension.

Ahora solicito su ayuda para que revisen el sitio y reporten los errores y agregen las pensiones :)

Gracias a bilson por la ayuda durante la programación y a todos lo que reportaron errores (que no fueron pocos).

http://beta.buscopension.com