Commits

christiansalazar committed 1bea217

reparado asunto de reporte de errors en modo de programacion, readme actualizado

Comments (0)

Files changed (5)

 	public $_lazyAuthModes = null;
 	private $_factory;
 	
+	// este array es usado por CrugeUi para almacenar errors que han sido reportados
+	// por CrugeUi::addError() , luego, para desplegar los errores observados
+	// puede usarse al pie de la pagina web la siguiente linea:
+	//
+	//	echo Yii::app()->user->ui->displayErrorConsole();
+	//
+	public $globalErrors = array();
+	
+	
+	
 	public function init()
 	{
 		$this->setImport(array(
 		..fin del head de tu laytout...
 	</head>
 		
-	Por defecto, Cruge apunta su UI a un layout interno que ya incluye a los archivos CSS requeridos,
-	por tanto no es necesario que hagas este paso si no vas a cambiar los layouts. Mas abajo tienes un tema que habla sobre el uso de layouts.
+Por defecto, Cruge apunta su UI a un layout interno que ya incluye a los archivos CSS requeridos, por tanto no es necesario que hagas este paso si no vas a cambiar los layouts. Mas abajo tienes un tema que habla sobre el uso de layouts.
+	
 ---
 		
 #Uso b�sico de Cruge
 
 RBAC es el sistema de control de acceso basado en roles (por sus siglas en ingles).  Todo el mecanismo RBAC puede ser manejado mediante la interfaz (UI) de Cruge, o mediante su API. Las dos modalidades para usar en este mecanismo son:
 
-1. Mecanismo estandar.  
+1. Consulta Explicita de Permisos.
 Es basicamente el mismo mecanismo que provee Yii, pero en Cruge se ha ampliado un poco mas. Para usar este mecanismo: en cualquier parte de tu codigo fuente puedes poner lo siguiente:
 
 	<?php if(Yii::app()->user->checkAccess('puede_ver_menu_sistema')) { ...mostar menu sistema... }?>
 
-2. Mecanismo extendido.
+2. Consulta Automatizada segun controller/action.
 Este mecanismo es muy util, porque permite controlar el acceso a tus controllers/actions de forma totalmente automatizada y controlada mediante la UI de Cruge.   Para usar este mecanismo, necesitar�s incluir en tu Controller (cualquiera que tu uses y que desees controlar a nivel de permisos) el siguiente codigo:
 
 	<?php
 	
 cual es la diferencia ? ninguna.  Solo se creo Yii::app()->user->rbac como una via mas "ordenada" para acceder a la funcion, ya que es relativa al usuario, mas que todo es para no ver dos componentes aislados.
 
+###Modo de Programacion RBAC - Visor de Permisos Requeridos
 
+Cruge dispone de una utilidad para ayudar a programar los permisos requeridos en un Rol con el objeto de que el usuario que tenga ese rol pueda realizar su trabajo con las restricciones adecuadas.
 
+Para ello el API de UI (Yii::app()->user->ui) dispone del siguiente mecanismo:
 
-
-
+1. Habilita el flag 'rbacSetupEnabled'=>true en tu config/main del componente cruge para obtener acceso a esta caracteristica.
 	
+2. Cuando habilitas el flag mencionado se iran creando las operaciones basadas en controller/action de forma automatica, para ello deberas incluir en cada controladora el siguiente filtro:
 	
-	
+		<?php
+		..cuerpo de tu controladora...
+		public function filters()
+		{
+			return array(
+				array('CrugeAccessControlFilter'),	
+			);
+		}	
+		..cuerpo de tu controladora...
+		?>
+	
+3.	Prueba tu aplicacion web con el usuario que tenga asignados los roles requeridos y que necesites probar.  Ocurriran dos cosas:
+		
+	a)	cuando tu pones explicitamente en alguna parte una sentencia de control y el usuario falla, es decir, no la tiene asignada en algun rol o tarea, entonces se almacenara como un error en una lista interna de Cruge. Esta lista podras verla mas adelante.
+		
+		<?php if(Yii::app()->user->checkAccess('solo_admins')) { ...haz algo... } ?>
+		
+			
+	b)	cuando una controladora incorpora el filtro 'CrugeAccessControlFilter' y un usuario no tiene asignada la operacion que representa a un action de esa controladora, entonces Cruge reportara el error. Recuerda que mas adelante escribi que Cruge maneja los actions y controllers automaticamente, si tu tienes un controller llamado "prueba" y dentro de el a un action llamado "Listado" entonces el programador de rbac creara automaticamente una operacion llamada "opr_prueba_listado", esta operacion la puedes agregar a un rol o una tarea.
+	
+4.	Como reportar los errores ?.  Puedes poner al pie de tu pagina web (en el layout principalmente) lo siguiente:
+		
+		<?php echo Yii::app()->user->ui->displayErrorConsole(); ?>
+				
+Ten en cuenta que este mecanismo solo funcionara si esta habilitado el flag 'rbacSetupEnabled'. De otro modo aunque llames a displayErrorConsole() este no mostrara nada.

components/CrugeAuthManager.php

 		));		
 	}
 	public function getDataProviderTasks($pageSize=20){
-		$authman = Yii::app()->user->rbac;
 		return new CArrayDataProvider($this->getTasks(), array(
 			'keyField'=>'name',
 			'sort'=>array(
 		));				
 	}
 	public function getDataProviderOperations($pageSize=20){
-		$authman = Yii::app()->user->rbac;
 		return new CArrayDataProvider($this->getOperations(), array(
 			'keyField'=>'name',
 			'sort'=>array(

components/CrugeUi.php

 			,'url'=>$this->getSystemUpdateUrl()),
 		);
 	}
+	/*	acumula los errores obtenidos durante el request para su posterior visualizacion con displayErrorConsole
 	
-	public function rbacSetupWindow($itemName,$tipoItemName,$descripcion=""){
-
-		$descr="";
-		if($descripcion != '')
-			$descr="<span style='font-weight: normal; color: white; font-style: italic;'>".$descripcion."</span>";
-
-		$estilo = "background-color: rgb(255,140,140);margin: 3px;padding: 3px;border-radius: 5px;color: white;box-shadow: 3px 3px 3px #333;overflow: auto;";
-		$titulo = ucwords(CrugeTranslator::t($tipoItemName." Requerido(a): "));
-		$mensaje = "<b>".$titulo."</b> <b style='color: yellow;'>{$itemName}</b> {$descr}";
-	
-		$explica = "Esta ventana aparece porque esta configurada la opcion [CrugeModule::rbacSetupEnabled = true]. Cuando termine de programar los permisos debera deshabilitar esta opcion";
+		este metodo es llamado desde CrugeWebUser::checkAccess cuando el flag 
+		CrugeModule::rbacSetupEnabled esta habilitado, el objetivo es informar que el $itemName
+		indicado ha fallado para el usuario activo.
+		
+		con este metodo se pretende ayudar al operador a que programe los permisos requeridos
+		para el rol o los roles asignados a un usuario en particular.
+		
+		@see displayErrorConsole
+	*/
+	public function addError($itemName,$tipoItemName="",$descripcion=""){
+		if(CrugeUtil::config()->rbacSetupEnabled == true){
+			CrugeUtil::config()->globalErrors[] = 
+				array('itemName'=>$itemName,'type'=>$tipoItemName,'descr'=>$descripcion);
+		}
+	}
 	
-		$help = "title='".CrugeTranslator::t($explica)."'";
+	/**
+		este metodo deberia ser invocado al final del layout principal del cliente para que le muestre los errores obtenidos y recopilados por addError
 	
-		$iconoHelp = "<img $help style='cursor: pointer;float: right;' src='".$this->getResourcePath('help.png')."' >";
-		$estiloFloat="";
-		
-		return "<div style='$estilo;'>".$mensaje.$iconoHelp."</div>";
+		@see addError
+	*/
+	public function displayErrorConsole(){
+		$outputText = "";
+		if(CrugeUtil::config()->rbacSetupEnabled == true){
+			$n=0;
+			foreach(CrugeUtil::config()->globalErrors as $gerr){
+					if($n == 0){	
+						$title=CrugeTranslator::t("Esta ventana le muestra los roles, tareas u operaciones requeridas que el usuario actual no tiene asignadas. La ventana aparece porque esta configurado el flag CrugeModule::rbacSetupEnabled = true");
+						$icon = "<img src='".$this->getResourcePath('help.png')."'>";
+						$outputText = "<div title='$title' class='rbac-global-error-list'>";
+						$outputText .= "<h6>".$icon.ucwords(CrugeTranslator::t("permisos requeridos")).": </h6>";
+						$outputText .= "<ul>";
+					}
+					$tipo="";
+					if($gerr['type']!='')
+						$tipo=" ({$gerr['type']})";
+					$desc="";
+					if($gerr['descr']!='')
+						$desc=" ({$gerr['descr']})";
+					$outputText .= "<li><b>".$gerr['itemName']."</b>".$tipo.$desc."</li>";
+				$n++;
+			}
+			if($n > 0)
+				$outputText .= "</ul></div>";
+		}
+		return $outputText;
 	}
 	
 	public function superAdminNote(){

components/CrugeWebUser.php

 				if(CrugeUtil::config()->rbacSetupEnabled == true){
 					$ai = $this->getrbac()->getAuthItem($itemName);
 					if($ai !== null){
-						echo $this->getui()->rbacSetupWindow($itemName
+						echo $this->getui()->addError($itemName
 							,$this->getrbac()->getAuthItemTypeName($ai->type)
 							,$descripcion
 							);
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.