sábado, 4 de agosto de 2012

Control de Usuarios y Roles para Yii Framework


Cruge - Control de Usuarios y ROLES (RBAC) para Yii Framework

En esta oportunidad quiero presentarles a Cruge, es un trabajo -serio- con el propósito de aislar todo el proceso de creación de cuentas de usuario, registro, login, edición de usuarios, asignación y edición de roles, tareas y operaciones para Yii Framework.

Documentación de Cruge

  1. Tutorial de Cruge (ir a la wiki)
  2. Documentación Detallada de Cruge (ir a wiki) (descarga PDF)
  3. Repositorio Bitbucket Oficial de Cruge (ir al repo)
  4. Extensiones para Cruge: (CrugeConnector , CrugeMailer)


screenshots

60 comentarios:

  1. Hola Christian, como verás, soy yo de nuevo! jejejeje lo siento por ser tan pesado, pero indagando he encontrado esto, que buena pinta no? me voy a poner con ello, espero puedas ayudarme en mis futuras dudas, que seguro tendré! Gracias!

    ResponderEliminar
  2. hola, ! no te preocupes a la orden. Es mejor que lo canalices por el foro de Yii Framework en Español, ahi la comunidad te da mas soporte, igualmente yo (respondiendo temas ahi a diario).

    ResponderEliminar
  3. de acuerdo, voy a echarle un ojo a cruge, como e has aconsejado por el privado, y te cuento, a ver si encuentro algún manual en castellano!! Gracias de nuevo!!

    ResponderEliminar
  4. Hola he seguido todas las instrucciones de instalación del modulo CRUGE, pero cuando corro la aplicación me da el siguiente error:

    **Property "CWebApplication.user" is read only. **

    y me indica el lugar específico:

    /yii/framework/base/CModule.php(483)

    la verdad no he mirado mucho la estructura de yii y no tengo idea de a que se deba el error, cualquier ayuda es bienvenida.

    ResponderEliminar
    Respuestas
    1. hola, pon el tema en http://www.yiiframeworkenespanol.org.

      primero prueba con un proyecto base, ahi en el repo hay un demo listo para probar incluso para arrancar el proyecto desde ahi. Si en ese demo aun te da problemas es porque tu framework de yii tiene problemas, instala uno nuevo.

      segundo, si el proyecto demo esta bien y tu apliacion no, es porque seguramente instalaste mal Cruge en tu propia aplicacion existente, seria para mi dificil saber que tienes ahi.

      lo que si puedo decirte es que leas bien el readme, ahi hay mucha info de lo mas delicado. Normalmente estos problemas que salen como el que muestras son por fallas de la propia aplicacion que quiere integrar a cruge, ojo no estoy diciendo que tu app este mala, sino digo que quiza hayas cambiado algo en ella de forma sustancial.

      Eliminar
  5. Christian, como podría hacer un renderpartial, de la vista registration de gruge? supongo que será posible, pero las combinaciones que he probado no funcionaban! Gracias de antemano, lo voy consiguiendo! jejejejejeje

    ResponderEliminar
  6. me respondo a mi mismo!! para renderizar vistas parciales del cruge, 'application.modules.cruge.views.ui.registration' y así puedes incluir el formulario de registro o de login en cualquier vista, siempre que ases la variable model correcta... (he tardado un poco en darme cuenta de esto último)

    ResponderEliminar
    Respuestas
    1. Yii Framework dispone del mecanismo de Layouts, y Cruge usa ese mecanismo, por eso y solo por eso en el README hay un tema acerca del layout y como configurarlo para adaptar cualquier vista de cruge a tu aplicacion.

      Esto que estas haciendo esta errado a menos que tengas una razón sustancialmente fuerte como para hacerlo, te estas saltando toda la programacion integrada de Cruge que le da vida al formulario de registro y aparte estas saltandote todo el modelo MVC al hacer eso.

      No me queda otra que pedirte disculpas si soy fuerte al decirtelo de esta manera pero es una costumbre muy arraigada del programador PHP a saltarse el MVC para irse por otra via que la que el componente ofrece.

      Eliminar
    2. Me estoy saltando el MVC? donde he puesto yo eso? estoy usando un formulario hecho con CactiveForm, que maneja un CContrller, y este a su vez los modelos que has desarrollado en Cruge, ni más ni menos, es cierto que no dentro del modulo, pero el modulo está instalado, y funciona perfectamente. Funciona la validación, con los rules del modelo, que he modificado, funciona la seguridad, funciona el mailer, y funciona ajax... No se en que momento me he saltado el MVC.

      Vuelvo a decirte lo mismo de antes, muchas gracias por tu trabajo, cruge funciona perfectamente, y yo lo estoy usando como usted dice en el readme, solo bajo una pequeña modificación estética.

      Saludos, y espero que este mal entendido no me impida realizarte futuras cuestiones.

      Eliminar
    3. hola, no te preocupes no he considerado nada en forma de mal entendido.
      no importa si usas un framework MVC o unas clases MVC o Cruge y su metodo MVC...lo que importa es no saltarse lo que el framework provee...eso implica saltarle el mvc, me explico mejor: cuando en vez de usar los layout decides en cambio desarmar el mecanismo para armarte uno a tu gusto..estas saltandote toda el API que trae..y ademas te saltas el mecanismo de layouts que ofrece yii.
      lo que quieres hacer perfectamente se pudo hacer perfecta y claramente usando layouts (leyendo tus otros posts que has puesto en varias partes), se que tienes tiempos cortos de desarrollo, espero que cuando tengas mas tiempo explores mas a cruge y a yii como tal para que me entiendas mejor a que me refiero.
      saludos y gracias por tus palabras, a veces lo que uno escribe en un teclado suena feo pero no es lo que uno quiere transmitir.

      Eliminar
  7. @Alberto a mi a veces me pasa cuando inicio un nuevo proyecto con Yii, que tengo que cambiar los permisos de lectura de algunas carpetas, échale un vistazo a la carpeta base... aunque esa no me suena de que me haya dado alguna vez ese error... a unas malas, comienza de cero, porque no es muy normal... Suerte!

    ResponderEliminar
  8. Excelente!!!!! Me ha sido muy útil. Lo estoy usando en un sistema q estoy armando, que ya de por si es complicado, y me has ahorrado un montón de laburo. Hasta ahora no tengo dudas, he podido integrarlo sin problemas.
    Muchas gracias!!

    ResponderEliminar
    Respuestas
    1. hola Flavia, me alegro que te haya servido. Internamente tiene bastantes prestaciones, no asi tanta documentacion del API como quisiera pero de a poco va.
      Igualmente, hay un tema pendiente con las traducciones, en el repo oficial de bitbucket hay un issue abierto sobre esto. Cualquier bug o enhancment que detectes puedes subir al sistema de issues que te menciono.

      Eliminar
  9. igualmente a Cruge les recomiendo EYui (ver tema aqui mismo en el blog).

    ResponderEliminar
  10. Buenas tardes Christian, bueno primero estoy incursionado en los frameworks, yii es el primero, me pareció interesante lo de roles y usuarios y lo estoy implementado pero me han salido unos errores y pues quizás sea por mi inexperiencia con yii pero quiero comentarlos uno de ellos es cuando va visualizar el widget "CActiveForm" dice que la propiedad enableClientValidation no existe bueno la omití del código y perfecto deja visualizar pero ahora se me presento un problema mas grande jejeje puros problemas jejeje, cuando ingreso a la opción administrar usuarios me muestra el siguiente error "Missing argument 1 for CDbConnection::createCommand(), called in C:\AppServ\www\proyectosEclipse\contactos\protected\modules\cruge\components\CrugeAuthManager.php on line 590 and defined"

    Estoy usando Apache/2.2.8 (Win32) PHP/5.2.6 Yii Framework/1.1.5 y postgres 9.1


    aclaro por si acaso funciona el uso del login y que un usuario se registre pero al terminar de registrarse sale el error, pero si se guardan los datos en base de datos

    agradecería su ayuda de antemano GRACIAS !!!

    ResponderEliminar
    Respuestas
    1. hola te respondi por correo, pero escribo de nuevo por aca agregando:

      trata de subirle un poco las versiones a las que estan reportadas en el README.md, Yii 1.1.11 al menos, php 5.3 al menos...quiza estas sean las causas.

      si aun subiendo las versiones base sigue el error entonces reporta el issue en el sitio de bitbucket,

      y gracias por informar !

      Eliminar
    2. gracias Christian solo fue cambiar la versión de yii y wuala... gracias ;) ahora a probarlo ...

      ha por cierto no recibí ningún e-mail ....

      Eliminar
  11. ok actualizate al ultimo commit que acaba de salir usando git:

    cd tuapp/modules/cruge
    git fetch
    git pull

    eso actualizara a cruge contra la ultima version. te recomiendo que no modifiques el core para que puedas sincronizarte con el repo de cruge y asi recibir los updates de una forma muy sencilla.

    ResponderEliminar
  12. Hola, soy nuevo tanto con yii como con cruge. He conseguido instalar cruge y estoy intentando crear la pagina de registro de usuarios. Mi duda es ¿Hay manera de definir campos personalizados de perfil ocultos?Gracias de antemano.

    ResponderEliminar
    Respuestas
    1. hola, en este momento no. cual sería el propósito de tener campos ocultos de perfil ? si tu objetivo es tener datos de tu propio negocio asociados al usuario de cruge lo que debes hacer es crear una relacion: una nueva tabla que asocie el usuario de cruge con otra cosa. Mira en los "casos de ejemplo" de la wiki.

      Eliminar
  13. Buenas Tarde Chistian, mi pregunta es como hago para hacer una regla de negocio, porque creo el rol lo asigno al usuario y luego voy al controlado y agrego las linea de codigo quye este en el tutorial gruge pero no hace nada.

    public function filters(){
    return array('accessControl',array('CrugeAccessControlFilter'));
    }

    $params ='x_x';
    if(Yii::app()->user->checkAccess('action_grupos_index', $params)){ Yii::app()->user->setFlash(‘success’,”El proceso fue realizado correctamente.”);
    }

    ResponderEliminar
  14. hola Christian estoy teniendo problemas a la hora de editar mi usuario y me tira este error Method CJavaScriptExpression::__toString() must return a string value sabesq puede ser?

    ResponderEliminar
    Respuestas
    1. CJavaScriptExpression es una clase que viene con las ultimas versiones de yii frramework, revisa que tu framework sea superior a 1.12. sino copia y pega el error aqui con su stack trace completo.

      Eliminar
    2. ahi te mando el stack trace

      #0
      – C:\xampp\htdocs\soporte\yii\framework\web\helpers\CJavaScript.php(94): CJavaScript::encode(CJavaScriptExpression)
      89 {
      90 $es=array();
      91 if(($n=count($value))>0 && array_keys($value)!==range(0,$n-1))
      92 {
      93 foreach($value as $k=>$v)
      94 $es[]="'".self::quote($k)."':".self::encode($v);
      95 return '{'.implode(',',$es).'}';
      96 }
      97 else
      98 {
      99 foreach($value as $v)

      Eliminar
    3. #1
      – C:\xampp\htdocs\soporte\yii\framework\web\helpers\CHtml.php(1065): CJavaScript::encode(array("success" => CJavaScriptExpression, "error" => CJavaScriptExpression, "url" => "/soporte/cruge/ui/ajaxgeneratenewpassword.html", "cache" => false))
      1060 {
      1061 if(!isset($options['success']))
      1062 $options['success']=new CJavaScriptExpression('function(html){jQuery("'.$options['replace'].'").replaceWith(html)}');
      1063 unset($options['replace']);
      1064 }
      1065 return 'jQuery.ajax('.CJavaScript::encode($options).');';
      1066 }
      1067
      1068 /**
      1069 * Generates the URL for the published assets.
      1070 * @param string $path the path of the asset to be published

      Eliminar
    4. #2
      – C:\xampp\htdocs\soporte\yii\framework\web\helpers\CHtml.php(2059): CHtml::ajax(array("success" => CJavaScriptExpression, "error" => CJavaScriptExpression, "url" => "/soporte/cruge/ui/ajaxgeneratenewpassword.html"))
      2054 $url='';
      2055 $handler.="jQuery.yii.submitForm(this,'$url',$params);{$return};";
      2056 }
      2057
      2058 if(isset($htmlOptions['ajax']))
      2059 $handler.=self::ajax($htmlOptions['ajax'])."{$return};";
      2060
      2061 if(isset($htmlOptions['confirm']))
      2062 {
      2063 $confirm='confirm(\''.CJavaScript::quote($htmlOptions['confirm']).'\')';
      2064 if($handler!=='')

      Eliminar
    5. #3
      – C:\xampp\htdocs\soporte\yii\framework\web\helpers\CHtml.php(435): CHtml::clientChange("click", array("ajax" => array("success" => CJavaScriptExpression, "error" => CJavaScriptExpression, "url" => "/soporte/cruge/ui/ajaxgeneratenewpassword.html"), "name" => "yt0", "type" => "button", "value" => "Generar una nueva clave", ...))
      430 }
      431 if(!isset($htmlOptions['type']))
      432 $htmlOptions['type']='button';
      433 if(!isset($htmlOptions['value']))
      434 $htmlOptions['value']=$label;
      435 self::clientChange('click',$htmlOptions);
      436 return self::tag('input',$htmlOptions);
      437 }
      438
      439 /**
      440 * Generates a button using HTML button tag.
      #4
      – C:\xampp\htdocs\soporte\yii\framework\web\helpers\CHtml.php(1004): CHtml::button("Generar una nueva clave", array("ajax" => array("success" => CJavaScriptExpression, "error" => CJavaScriptExpression, "url" => "/soporte/cruge/ui/ajaxgeneratenewpassword.html")))
      0999 */
      1000 public static function ajaxButton($label,$url,$ajaxOptions=array(),$htmlOptions=array())
      1001 {
      1002 $ajaxOptions['url']=$url;
      1003 $htmlOptions['ajax']=$ajaxOptions;
      1004 return self::button($label,$htmlOptions);
      1005 }
      1006
      1007 /**
      1008 * Generates a push button that can submit the current form in POST method.
      1009 * @param string $label the button label
      #5
      – C:\xampp\htdocs\soporte\protected\modules\cruge\views\ui\usermanagementupdate.php(51): CHtml::ajaxButton("Generar una nueva clave", "/soporte/cruge/ui/ajaxgeneratenewpassword.html", array("success" => CJavaScriptExpression, "error" => CJavaScriptExpression))
      46 user->ui->ajaxGenerateNewPasswordUrl
      49 ,array('success'=>new CJavaScriptExpression('fnSuccess'),
      50 'error'=>new CJavaScriptExpression('fnError'))
      51 ); ?>
      52
      56

      Eliminar
    6. #6
      – C:\xampp\htdocs\soporte\yii\framework\web\CBaseController.php(127): require("C:\xampp\htdocs\soporte\protected\modules\cruge\views\ui\userman...")
      122 $data=$_data_;
      123 if($_return_)
      124 {
      125 ob_start();
      126 ob_implicit_flush(false);
      127 require($_viewFile_);
      128 return ob_get_clean();
      129 }
      130 else
      131 require($_viewFile_);
      132 }
      #7
      – C:\xampp\htdocs\soporte\yii\framework\web\CBaseController.php(96): CBaseController->renderInternal("C:\xampp\htdocs\soporte\protected\modules\cruge\views\ui\userman...", array("model" => CrugeStoredUser, "boolIsUserManagement" => true), true)
      091 {
      092 $widgetCount=count($this->_widgetStack);
      093 if(($renderer=Yii::app()->getViewRenderer())!==null && $renderer->fileExtension==='.'.CFileHelper::getExtension($viewFile))
      094 $content=$renderer->renderFile($this,$viewFile,$data,$return);
      095 else
      096 $content=$this->renderInternal($viewFile,$data,$return);
      097 if(count($this->_widgetStack)===$widgetCount)
      098 return $content;
      099 else
      100 {
      101 $widget=end($this->_widgetStack);
      #8
      – C:\xampp\htdocs\soporte\yii\framework\web\CController.php(870): CBaseController->renderFile("C:\xampp\htdocs\soporte\protected\modules\cruge\views\ui\userman...", array("model" => CrugeStoredUser, "boolIsUserManagement" => true), true)
      865 */
      866 public function renderPartial($view,$data=null,$return=false,$processOutput=false)
      867 {
      868 if(($viewFile=$this->getViewFile($view))!==false)
      869 {
      870 $output=$this->renderFile($viewFile,$data,true);
      871 if($processOutput)
      872 $output=$this->processOutput($output);
      873 if($return)
      874 return $output;
      875 else

      Eliminar
    7. #10
      – C:\xampp\htdocs\soporte\protected\modules\cruge\controllers\UiController.php(272): CController->render("usermanagementupdate", array("model" => CrugeStoredUser, "boolIsUserManagement" => true))
      267 array(
      268 'model' => $model
      269 ,
      270 'boolIsUserManagement' => $boolIsUserManagement
      271 )
      272 );
      273 }
      274
      275 /*
      276 solo se crea el ICrugeStoredUser, no todo el perfil.
      277 */
      #11
      – C:\xampp\htdocs\soporte\protected\modules\cruge\controllers\UiController.php(230): UiController->_editUserProfile(CrugeStoredUser, true)
      225 }
      226 }
      227
      228 public function actionUserManagementUpdate($id)
      229 {
      230 $this->_editUserProfile(Yii::app()->user->um->loadUserById($id), true);
      231 }
      232
      233 public function _editUserProfile(ICrugeStoredUser $model, $boolIsUserManagement)
      234 {
      235 // carga los campos definidos por el administrador
      #12
      unknown(0): UiController->actionUserManagementUpdate("14")

      Eliminar
    8. #13
      – C:\xampp\htdocs\soporte\yii\framework\web\actions\CAction.php(107): ReflectionMethod->invokeArgs(UiController, array("14"))
      102 else if($param->isDefaultValueAvailable())
      103 $ps[]=$param->getDefaultValue();
      104 else
      105 return false;
      106 }
      107 $method->invokeArgs($object,$ps);
      108 return true;
      109 }
      110 }
      #14
      – C:\xampp\htdocs\soporte\yii\framework\web\actions\CInlineAction.php(48): CAction->runWithParamsInternal(UiController, ReflectionMethod, array("id" => "14"))
      43 {
      44 $methodName='action'.$this->getId();
      45 $controller=$this->getController();
      46 $method=new ReflectionMethod($controller, $methodName);
      47 if($method->getNumberOfParameters()>0)
      48 return $this->runWithParamsInternal($controller, $method, $params);
      49 else
      50 return $controller->$methodName();
      51 }
      52
      53 }
      #15
      – C:\xampp\htdocs\soporte\yii\framework\web\CController.php(309): CInlineAction->runWithParams(array("id" => "14"))
      304 {
      305 $priorAction=$this->_action;
      306 $this->_action=$action;
      307 if($this->beforeAction($action))
      308 {
      309 if($action->runWithParams($this->getActionParams())===false)
      310 $this->invalidActionParams($action);
      311 else
      312 $this->afterAction($action);
      313 }
      314 $this->_action=$priorAction;

      Eliminar
    9. #16
      – C:\xampp\htdocs\soporte\yii\framework\web\filters\CFilterChain.php(134): CController->runAction(CInlineAction)
      129 $filter=$this->itemAt($this->filterIndex++);
      130 Yii::trace('Running filter '.($filter instanceof CInlineFilter ? get_class($this->controller).'.filter'.$filter->name.'()':get_class($filter).'.filter()'),'system.web.filters.CFilterChain');
      131 $filter->filter($this);
      132 }
      133 else
      134 $this->controller->runAction($this->action);
      135 }
      136 }
      #17
      – C:\xampp\htdocs\soporte\protected\modules\cruge\components\CrugeAccessControlFilter.php(90): CFilterChain->run()
      85 //
      86 $this->reportError($controllerItemName);
      87 }
      88 */
      89
      90 $filterChain->run();
      91 }
      92
      93 private function reportError($itemName)
      94 {
      95 if (CrugeUtil::config()->allowUserAlways == false) {
      #18
      – C:\xampp\htdocs\soporte\protected\modules\cruge\components\CrugeUiAccessControlFilter.php(37): CrugeAccessControlFilter->preFilter(CFilterChain)
      32 // los demas filtros
      33 $currentActionName = Yii::app()->getController()->action->id;
      34 if (in_array($currentActionName, $this->publicActions)) {
      35 return true;
      36 } else {
      37 parent::preFilter($filterChain);
      38 }
      39 }
      40
      41 protected function postFilter($filterChain)
      42 {
      #19
      – C:\xampp\htdocs\soporte\yii\framework\web\filters\CFilter.php(39): CrugeUiAccessControlFilter->preFilter(CFilterChain)
      34 * if the action should be executed.
      35 * @param CFilterChain $filterChain the filter chain that the filter is on.
      36 */
      37 public function filter($filterChain)
      38 {
      39 if($this->preFilter($filterChain))
      40 {
      41 $filterChain->run();
      42 $this->postFilter($filterChain);
      43 }
      44 }

      Eliminar
    10. #20
      – C:\xampp\htdocs\soporte\yii\framework\web\filters\CFilterChain.php(131): CFilter->filter(CFilterChain)
      126 {
      127 if($this->offsetExists($this->filterIndex))
      128 {
      129 $filter=$this->itemAt($this->filterIndex++);
      130 Yii::trace('Running filter '.($filter instanceof CInlineFilter ? get_class($this->controller).'.filter'.$filter->name.'()':get_class($filter).'.filter()'),'system.web.filters.CFilterChain');
      131 $filter->filter($this);
      132 }
      133 else
      134 $this->controller->runAction($this->action);
      135 }
      136 }
      #21
      – C:\xampp\htdocs\soporte\yii\framework\web\filters\CFilter.php(41): CFilterChain->run()
      36 */
      37 public function filter($filterChain)
      38 {
      39 if($this->preFilter($filterChain))
      40 {
      41 $filterChain->run();
      42 $this->postFilter($filterChain);
      43 }
      44 }
      45
      46 /**
      #22
      – C:\xampp\htdocs\soporte\yii\framework\web\CController.php(1146): CFilter->filter(CFilterChain)
      1141 */
      1142 public function filterAccessControl($filterChain)
      1143 {
      1144 $filter=new CAccessControlFilter;
      1145 $filter->setRules($this->accessRules());
      1146 $filter->filter($filterChain);
      1147 }
      1148
      1149 /**
      1150 * Returns a persistent page state value.
      1151 * A page state is a variable that is persistent across POST requests of the same page.
      #23
      – C:\xampp\htdocs\soporte\yii\framework\web\filters\CInlineFilter.php(59): CController->filterAccessControl(CFilterChain)
      54 * @param CFilterChain $filterChain the filter chain that the filter is on.
      55 */
      56 public function filter($filterChain)
      57 {
      58 $method='filter'.$this->name;
      59 $filterChain->controller->$method($filterChain);
      60 }
      61 }
      #24
      – C:\xampp\htdocs\soporte\yii\framework\web\filters\CFilterChain.php(131): CInlineFilter->filter(CFilterChain)
      126 {
      127 if($this->offsetExists($this->filterIndex))
      128 {
      129 $filter=$this->itemAt($this->filterIndex++);
      130 Yii::trace('Running filter '.($filter instanceof CInlineFilter ? get_class($this->controller).'.filter'.$filter->name.'()':get_class($filter).'.filter()'),'system.web.filters.CFilterChain');
      131 $filter->filter($this);
      132 }
      133 else
      134 $this->controller->runAction($this->action);
      135 }
      136 }

      Eliminar
    11. #25
      – C:\xampp\htdocs\soporte\yii\framework\web\CController.php(292): CFilterChain->run()
      287 $this->runAction($action);
      288 else
      289 {
      290 $priorAction=$this->_action;
      291 $this->_action=$action;
      292 CFilterChain::create($this,$action,$filters)->run();
      293 $this->_action=$priorAction;
      294 }
      295 }
      296
      297 /**
      #26
      – C:\xampp\htdocs\soporte\yii\framework\web\CController.php(266): CController->runActionWithFilters(CInlineAction, array("accessControl", array(0 => "CrugeUiAccessControlFilter", "publicActions" => array("captcha", "registration", "login", "logout", ...))))
      261 {
      262 if(($parent=$this->getModule())===null)
      263 $parent=Yii::app();
      264 if($parent->beforeControllerAction($this,$action))
      265 {
      266 $this->runActionWithFilters($action,$this->filters());
      267 $parent->afterControllerAction($this,$action);
      268 }
      269 }
      270 else
      271 $this->missingAction($actionID);
      #27
      – C:\xampp\htdocs\soporte\yii\framework\web\CWebApplication.php(283): CController->run("usermanagementupdate")
      278 {
      279 list($controller,$actionID)=$ca;
      280 $oldController=$this->_controller;
      281 $this->_controller=$controller;
      282 $controller->init();
      283 $controller->run($actionID);
      284 $this->_controller=$oldController;
      285 }
      286 else
      287 throw new CHttpException(404,Yii::t('yii','Unable to resolve the request "{route}".',
      288 array('{route}'=>$route===''?$this->defaultController:$route)));
      #28
      – C:\xampp\htdocs\soporte\yii\framework\web\CWebApplication.php(142): CWebApplication->runController("cruge/ui/usermanagementupdate/id/14")
      137 foreach(array_splice($this->catchAllRequest,1) as $name=>$value)
      138 $_GET[$name]=$value;
      139 }
      140 else
      141 $route=$this->getUrlManager()->parseUrl($this->getRequest());
      142 $this->runController($route);
      143 }
      144
      145 /**
      146 * Registers the core application components.
      147 * This method overrides the parent implementation by registering additional core components.

      Eliminar
    12. #29
      – C:\xampp\htdocs\soporte\yii\framework\base\CApplication.php(162): CWebApplication->processRequest()
      157 */
      158 public function run()
      159 {
      160 if($this->hasEventHandler('onBeginRequest'))
      161 $this->onBeginRequest(new CEvent($this));
      162 $this->processRequest();
      163 if($this->hasEventHandler('onEndRequest'))
      164 $this->onEndRequest(new CEvent($this));
      165 }
      166
      167 /**
      #30
      – C:\xampp\htdocs\soporte\index.php(13): CApplication->run()
      08 defined('YII_DEBUG') or define('YII_DEBUG',true);
      09 // specify how many levels of call stack should be shown in each log message
      10 defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);
      11
      12 require_once($yii);
      13 Yii::createWebApplication($config)->run();

      Eliminar
  15. y queria saber como hago para cambiar el usuario y la contraseña que tiene de admin por defecto porque no me toma cambiando el superuserName desde el config/main

    ResponderEliminar
    Respuestas
    1. hola, usuarios y passwords se establecen en la tabla cruge_user en la base de datos, no en config man.

      Eliminar
  16. y tambien si hay alguna manera de no hacer visible los elementos del menu segun el rol que tenga cada usuario??

    ResponderEliminar
  17. dos temas ahi: 1. si usas el constructor de menues de cruge, ya eso lo hace automatico.
    2. si no lo usas, entonces simplemente se hace con Yii::app()->user->checkAccess, la vista por defecto de yii lo hace, en el layouts/main.php.

    ResponderEliminar
    Respuestas
    1. Este comentario ha sido eliminado por el autor.

      Eliminar
    2. el codigo q te copie abajo es parte de mi menu:
      array('label'=>'Clientes', 'visible'=>
      'items'=>array(
      array('label'=>'Todos los Clientes','url'=>array('/clientes/index')),
      array('label'=>'Administrador de Clientes','url'=>array('/clientes/admin')),
      array('label'=>'Nuevo Cliente','url'=>array('/clientes/create')),
      ),
      )
      que le tnego que agregar a visible si quiero q todos los roles q tengan asigando clientes puedan ver ese elemento en el menu y los roles q no tengan clientes no lo vean

      Eliminar
  18. hola Christian gracias por tu aporte, quisiera saber donde puedo encontrar la documentación de cruge ya que parece que los en laces en ya no están y necesito implementarlo, de antemano gracias.

    ResponderEliminar
    Respuestas
    1. hola, los enlacen estan ahi, no se han eliminado ni se eliminarán. solo hubo una caida por mudanza, y eso duro solo menos de un dia.

      Eliminar
  19. Christian pudiste mirar lo que te mande del error que te habia comentado?

    ResponderEliminar
  20. hola christian disculpa la insistencia pero sabes cual podria ser el error q te mande mas arrib??

    ResponderEliminar
  21. Hola cristian soy nueva en lo de yii ya realice la instacion de yii y la del cruge queria preguntarte como puedo hacer para crear un usuario con multiples roles y que cuando el usuario inicie pregunte por que rol desea ingresar y que solo se muestre lo indicado para el rol que eligio he estado intentando muchas cosas y no he podido dar en el punto muchas gracias

    ResponderEliminar
  22. Hola Cristian. Te cuento que instalé CRUGE, lo tengo funcionando y me parece simplemente genial, es justo lo que necesitaba y no tuve que reinventar la rueda!
    Te escribo porque ayer estuve ingresando al link: http://yiiframeworkenespanol.org/wiki/index.php?title=CrugeTutorial pero hoy quise entrar de nuevo para consultarlo y sólo muestra una página de wiki vacía. Me podrías indicar si cambió el link o si hubo algún problema?
    Desde ya, me ofrezco a colaborar con el proyecto si necesitás ayuda, estoy desarrollando un sistema en Yii y este módulo en particular me resulta muy útil. Gracias!
    Patricia

    ResponderEliminar
  23. Hola Cristian, igualmente estoy tratando de acceder a la documentacion al link: http://yiiframeworkenespanol.org/wiki/index.php?title=CrugeTutorial pero no he podido consultarlo y sólo muestra una página de wiki vacía. Me podrías indicar donde puedo cionsultar todo ese tutorial. Gracias

    ResponderEliminar
  24. Hola, esta caida la Wiki, pronto se resolvera. Mientras tanto pueden recurrir a este PDF:

    https://bitbucket.org/christiansalazarh/cruge/downloads/cruge--christiansalazarh%40gmail.com--.pdf

    ResponderEliminar
  25. Hola Christian, espero te encuentres bien y gracias por cruge que RBAC no ha ahorrado mucho tiempo en desarrollo, pero tenemos un probelma con cruge y el tiempo de duración de las sesiones usando centos default install con apache y apache user. Hemos probado aumentando el tiempo a nivel del php.ini y cambiamos el campo dentro de las variables configurables de sistema del cruge por web, no obstante, siguen las sesiones expirando muy rápido fácilmente en menos de 3-5 mins, también revisamos dónde se guardan las sesiones en archivos e hicimos que el apache tenga permisos sin problema, pero no logramos entender la lógica de la expiración, por cierto lo que sí vemos es que cuando un user hace login en la tabla BD de sesiones se crean pero no se eliminan ahora fácilmente tenemos sobre 5000 registros dentro de la tabla, espero nos puedas guiar para solventar el problema.

    Quedo atento a comentarios

    ResponderEliminar
  26. Hola Jean Paul en la APi de ayuda tienes lo que estas buscando , http://yiiframeworkenespanol.com/wiki/index.php?title=Cruge#VARIABLES_DEL_SISTEMA

    ResponderEliminar
  27. Saludos Christian, revisando tu excelente modulo CRUGE (que de hecho lo utilizo en un sistema web que estoy realizando) di con una "pequeña falla" que algun usuario mal intencionado podria explotarla.

    En el módulo de variables del sistema, se indica que es posible deshabilitar/habilitar el "enlace de registrarse" para hacer login despues.
    Pues una vez deshabilitado si el "usuario mal intencionado" conoce a cruge entonces puede hacer algo como "http://localhost/blogyii/index.php?r=cruge/ui/registration" e ingresar datos para crear registros las veces que desee.

    Solucioné para mi caso dicho "problemita" editando el archivo /ui/registration.php y colocando lo sgte al inicio del archivo:
    user->um->getDefaultSystem()->getn('registrationonlogin')!=1) {
    header('location: '.Yii::app()->createUrl('site/login'));
    die();
    }
    ?>

    Aunque es una tonteria, es mejor estar prevenido. ;)
    Tu modulo es excelente y me ha ahorrado muchas horas de trabajo. Gracias por haberlo brindado a la comunidad.
    Tu blog indica que tienes un excelente nivel para la programacion, te felicito por hacer cosas bien hechas.

    Atte
    Paolo R.
    www.tiendasvirtuales.com.ve

    ResponderEliminar
    Respuestas
    1. Hola paolo. que bueno que les ha servido. es el propósito. respecto al bug o a lo que consideres como bug hay un repositorio para ello, sería bueno que te registres en bitbucket y crees un nuevo issue indicando con detalles el caso.

      Eliminar
  28. hola donde se guardan los menus creados osea me refiero a las tareas y roles, se que estan en administrador de usuarios pero es que me muestro un error al crear un nuevo rol ahora ya no pedo acceder, ni crear nuevos roles para

    ResponderEliminar
  29. Hola buenas noches, estoy intentando agregar un rol a un usuario pero el rol es en base a un modulo que he creado esto es posible? gracias de antemano

    ResponderEliminar
  30. Buenas tardes, estoy usando CRUGER para un mini sistema web pero, voy varios dias tratando que mis modulos desarrollado se muestren en la seccion de Operaciones, tareas, alguno que me ayude indicando que debo configurar para que se muestre en el GRUGER

    ResponderEliminar
  31. Buenos dias, quisiera saber como limitar la sesion de un usuario a solo 1, es decir, que no pueda acceder a la aplicacion desde la misma ip o desde otro equipo, a lo mejor la pregunta es tonta, pero ignoro como hacerlo, agradezco la atencion y ayuda que me puedan brindar

    ResponderEliminar
  32. Hola como estas Christian, Disculpa tengo una curiosidad acerca de los campos personalizado eh creado dos campos Nombre y Apellido pero gustaría saber como puedo mostrar esos campos en usermanagementadmin y que me permita realizar búsquedas por esos dos campos personalizados. De antemano te agradezco la atencion.!

    ResponderEliminar