Pareces nuevo por aquí. Si quieres participar, ¡pulsa uno de estos botones!
<?php class ControllerBase { /** * La accion por defecto es redirecionar a el controlador login * */ function init(){ $this->route_to('controller: admin'); } public $before_filter = 'seguridad'; /** * Este metodo es llamado antes de ejecutar cualquier accion * en cualquier controlador por Kumbia * * @param string $controlador * @param string $acccion */ public function seguridad(){ $controlador = $this->controller_name; $accion = $this->action_name; /** * El controlador login es el unico que no tiene validacion * $usuarios_id viene de la variable de sesión usuarios_id * creada en el controlador login/valida */ $usuario_id = Session::get_data('usuario_id'); if ($usuario_id!=null){ $tipo = Session::get_data('usuario_tipo'); } else { return $this->route_to('action: index'); } /** * * Si es de Tipo a tiene que tener permiso a TODO! * */ // $tipo='A'; if($controlador!='admin' && $tipo !='A'){ $objacciones = $this->Acciones->find_first("nombre='$accion'"); $tiene_permiso = $this->Permisos->count("controlador='$controlador' and acciones_id = '$objacciones->id' and usuario_id = '$usuario_id'"); // Muestra un mensaje con la accion realizada flash::success('Accion: '.$objacciones->nombre); /** * Si no tiene acceso ejecuta la accion no_acceso en el * controlador login */ if(!$tiene_permiso){ $this->route_to('controller: admin', 'action: no_acceso'); return false; }else{ /** * Revisa si el controlador es StandarForm y * oculta los botones a los que no tiene acceso */ if(is_subclass_of($this, 'StandardForm')){ /** *Traemos toda la tabla Acciones */ $objacciones = $this->Acciones->find(); foreach($objacciones as $objaccion){ /** * Por cada accion busco el regristo en la tabla permisos */ $objpermiso = $this->Permisos->find_first("controlador='$controlador' and usuario_id = '$usuario_id' and acciones_id = '$objaccion->id'"); flash::success($objaccion->nombre.' '.$objpermiso->estado); /** * Si no existe o esta desactivado elimino el boton correspondiente */ if($objpermiso->estado=='D' or !$objpermiso->estado){ switch($objaccion->nombre){ case 'insert': $this->unable_insert(); break; case 'query': $this->unable_query(); break; case 'browse': $this->unable_browse(); break; case 'update': $this->unable_update(); break; case 'delete': $this->unable_delete(); break; case 'report': $this->unable_report(); break; } } } } } echo "error"; } } } ?>
<?php class AccionesController extends StandardForm { public $scaffold = true; public function __construct(){ } } ?>acciones.php
<?php class Acciones extends ActiveRecord { } ?>
Comentarios
<!-- m --><a class="postlink" href="http://www.assembla.com/wiki/show/kumbia/indice-doc-05">http://www.assembla.com/wiki/show/kumbia/indice-doc-05</a><!-- m -->
una solución al estilo POO.
Y hay por ahi una testigo-> insertar que me lleva un log.
el problema cuando cargo un usuario que no es de 'A' (administrador) me salta el siguiente error
la linea 36 es $this->Acciones->find_first("nombre='$accion'");
y pasa ese error con le primer find_first que ponga en el programa de la tabla que sea.-
Los ActiveRecord son generados automáticamente.-
los CRUD son generados por el sistema y hago que sean extends de la clase seguridad.-
creo que por este punto es mas importante...
Me tocó a mi este problema, pues la aplicación funcionaba bien en 0.47 pero en 0.5 no.
La clase no da accesos a los modelos, algo se cambió y debe ser así.
Eso resuelve el problema.