Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/06/2014, 15:56
Montes28
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 7 meses
Puntos: 6
como optimizar el siguiente codigo

Les explico en que consiste la aplicación que estoy desarrollando:

Tengo 20 crud y los cree con Laravel-4-Generators, por lo tanto tengo 20 controladores, 20 modelos, y 20 directorios con sus respectivas vistas
Autenticacion de usuarios y permisos y estoy utilizando sentry.

Un requerimiento que me hicieron es que dependiendo del usuario tendrá acceso a diferentes datos.

entonces es acá donde veo que se me repite mucho el código, en cada método de cada controlador yo valido que usuario esta autenticado y dependiendo de su perfil y a la entidad a la que pertenece hago diferentes consultas a la base de datos.

cada crud tiene su entrada (osea pagina donde listo todos los registros de dicha entidad o tabla)y lo hago mediante este método

Código PHP:
Ver original
  1. //controlador
  2.  
  3. public function index()
  4.     {
  5. //obtengo el valor de la variable de sesion para obtener el perfil del usuario
  6. $perfil =Session::get('perfil');
  7. //obtener el usuario logeado
  8. $user = Sentry::getUser();
  9. //obtengo el un objeto al que pertenece el usuario logeado
  10. $observatorio = Observatory::find($user->observatorio_id);
  11. //en esta variable concateno el perfil y una cadena para saber a que entidad pertenece el usuario
  12. $perfilObservatorio = $perfil.$observatorio->alias;
  13. //este codigo lo hago en todos los metodos de los 20 controladores
  14.  
  15. //continua el switch
  16.  
  17.             switch ($perfilObservatorio) {
  18.             case 'Superadministradorovsm': //Superadministrador
  19.             $stations = Station::with('volcan')->orderBy('id', 'Asc')->get();
  20.             $submenuObservatorios = 'todos';
  21.             break;
  22.             case 'Coordinador Proyectoovsm'://Coordinador Proyecto OVSM
  23.             case 'Coordinador Proyectoovsp'://Coordinador Proyecto Ovsp
  24.             case 'Coordinador Proyectoovspop'://Coordinador Proyecto Ovspop
  25.             $stations = Station::with('volcan')->orderBy('id', 'Asc')->get();
  26.             $submenuObservatorios = 'todos';
  27.             break;
  28.             case 'Administrador Observatorioovsm': //Administrador Observatorio ovsm
  29.             case 'Administrador Observatorioovsp': //Administrador Observatorio ovsp
  30.             case 'Administrador Observatorioovspop': //Administrador Observatorio ovspop
  31.             case 'Superadministradorovsp':
  32.             case 'Superadministradorovspop':
  33.             case 'Coordinador Observatorioovsm':
  34.             case 'Coordinador Observatorioovsp':
  35.             case 'Coordinador Observatorioovspop':
  36.             case 'Tematicoovsm':
  37.             case 'Tematicoovsp':
  38.             case 'Tematicoovspop':                 
  39.             $stations = Station::with('volcan')->where('observatorio_id', '=', $user->observatorio_id )->orderBy('id', 'Asc')->get();
  40.             $submenuObservatorios ='uno';
  41.             break;
  42.             default:
  43.             break;
  44.             }
  45.  
  46. //y tengo que realizar estas consultas que no dependen del perfil o la entidad a la que pertenece el usuario
  47. //estas consultas tambien las tengo que repetir en cada uno de los metodos de los 20 controladores
  48.  
  49.                         $transmisiones = Connectivity::all();
  50.             $volcanes =Volcano::all();  
  51.             $numeroEstaciones = Station::all()->count();
  52.             $menu = 'menu.menu'.Session::get('perfil');
  53.             $nombreModulo = 'Estaciones';
  54.             $observatorios = Observatory::orderBy('id', 'Asc')->get();
  55.             $areas = Area::where('monitoreo','=','TRUE')->get();
  56.             $tiposEstaciones = Station_type::all();
  57.             return View::make('stations.index', compact('tiposEstaciones','volcanes','transmisiones','areas','observatorio','observatorios','submenuObservatorios','perfilObservatorio','stations', 'nombreModulo','perfilObservatorio','menu'));
  58.  
  59. }


yo lo que pienso hacer es una clase que valide el usuario y le entregue al controlador dicho valor y retorno la vista. estoy bien o estoy mal?

que me recomiendan?