public static function run()
 {
     Autoloader::init();
     $session = SessionFactory::create();
     $session->setTime('864000');
     //24 hs
     $session->start();
     $requestHandler = RequestHandlerFactory::create();
     $requestHandler->handle($_REQUEST);
 }
 public function execute()
 {
     //Session User ID
     $session = SessionFactory::create();
     $userId = $session->get('session-user-id');
     //Request Handler
     $requestHandler = RequestHandlerFactory::create();
     $selectedActionKey = $requestHandler->getSelectedActionKey();
     //Datahandler
     $datahandler = DatahandlerFactory::create('D_ReadAllowedRoles');
     $datahandler->setInData(array('action-name' => $selectedActionKey, 'user-id' => $userId, 'admin-role-id' => 1));
     $allowedRoles = $datahandler->getOutData();
     $isAuthorize = $allowedRoles != array();
     if ($isAuthorize) {
         $session->set("authorized", true);
     } else {
         $session->set("authorized", false);
     }
 }
 public function execute()
 {
     //SESSION
     $session = SessionFactory::create();
     if ($session->get("authenticated") == null) {
         $session->set("authenticated", false);
     }
     if ($session->get("authorized") == null) {
         $session->set("authorized", false);
     }
     //ACTIONS
     $actions = ActionFactory::create();
     //REQUESTHANDLER AND SELECTACTIONKEY
     $requestHandler = RequestHandlerFactory::create();
     $selectedActionKey = $requestHandler->getSelectedActionKey();
     //VALIDATOR
     $validator = ValidatorFactory::create();
     //REDIRECTOR
     $redirector = RedirectorFactory::create();
     ////LOGICA DE AUTENTICACIÓN Y AUTORIZACIÓN:
     //Si no está autenticado se ejecuta la acción de autenticación
     //, esto podría ser también si selecciona Authenticate
     $validator->ifFalse($session->get("authenticated"))->execute($actions['A_Authenticate']);
     //Si selecciona Logout Action se le permite ejecutar siempre.
     $validator->ifTrue($selectedActionKey == 'A_Logout')->execute($actions['A_Logout']);
     //Si después de ser autenticado entra aquí no está autenticado
     //se ejecuta Logout:
     $validator->ifFalse($session->get("authenticated"))->execute($actions['A_Logout']);
     //Si está autenticado y no autorizado se ejecuta la acción de autorización
     //(siempre se debe autorizar, para que esto sea más eficiente armar un cache en
     //session con las acciones autorizadas)
     $actions['A_Authorize']->execute();
     //Si está autenticado y no autorizado:
     // $validator->ifFalse( $authorizer->isAuthorized() )
     $validator->ifFalse($session->get("authorized"))->respond(NO_AUTHORIZED_ACTION);
     /*Si está autenticado y autorizado y quiere ejecutar login lo 
     		redirijo a default a default action:*/
     $validator->ifTrue($selectedActionKey == "A_Authenticate")->redirectTo('index.php?A_EnterFilterDataForm');
     //Si está autenticado y autorizado y ejecuta una acción no existente
     $validator->ifFalse(array_key_exists($selectedActionKey, $actions))->respond($selectedActionKey . " " . NOT_IMPLEMENTED);
     //Si está autenticado y autorizado y ejecuta una acción existente
     $actions[$selectedActionKey]->execute();
 }