Source

cruge / components / CrugeAccessControlFilter.php

<?php 
	/*	CrugeAccessControlFilter
	
		Concede acceso en base a verificar si el nombre del controller y el action a ser usado
		estan definidos en las operaciones creadas por el administrador de RBAC.
		
		como funciona:
		
			si este filtro es usado y un usuario quiere acceder al action: "site/contact"
			entonces:
			
				1. sistema arma un nombre de OPERACION asi: "action_site_contact"
				
				2. concede paso tras verificar si el usuario que autenticado tiene acceso con:
					Yii::app()->user->checkAccess("action_site_contact")
			
		como se usa:
		
			se declara el uso de esta clase en el metodo filters() de la clase del usuario,
			asi:
				array('CrugeAccessControlFilter'),
		
			en la clase del usuario asi:
		
				public function filters()
				{
					return array(
						//'accessControl', // perform access control for CRUD operations
						array('CrugeAccessControlFilter'),
					);
				}
				
				
		la excepcion reportara error 401 indicando 'Access Denied'. Estandar http.
		
 	@author: Christian Salazar H. <christiansalazarh@gmail.com> @bluyell
	@license protected/modules/cruge/LICENCE
*/
class CrugeAccessControlFilter extends CFilter {

		public function init(){
			parent::init();
		}
	
		protected function preFilter($filterChain)
		{
			
			
			$controllerItemName = "controller_".Yii::app()->getController()->id;
			
			$currentActionName = Yii::app()->getController()->action->id;
			$actionItemName = "action_".Yii::app()->getController()->id."_".$currentActionName;
			
			// se dara acceso siempre a site/error ya que por defecto
			// es el punto de muestra de errores de Yii. esto es para facilitar el uso de cruge
			if((Yii::app()->getController()->id=='site') && (Yii::app()->getController()->action->id=='error'))
				return true;
				
			
			// tiene permiso para la controladora indicada ?
			//
			// tiene permiso para la accion indicada ?
			//
			//if(Yii::app()->user->checkAccess($controllerItemName))
			//{
				// si tiene permiso.
				
				// tiene permiso para la accion indicada ?
				//
				if(Yii::app()->user->checkAccess($actionItemName))
				{
					// si tiene autorizacion para la accion indicada
					
				}
				else{
					// no esta autorizado
					//
					$this->reportError($actionItemName);
				}
			/*
			}
			else{
				// no esta autorizado a la controladora en general.
				//
				$this->reportError($controllerItemName);
			}
			*/
			
			$filterChain->run();
		}
		
		private function reportError($itemName){
			if(CrugeUtil::config()->allowUserAlways == false)
				throw new CrugeException($itemName,401);
		}

		protected function postFilter($filterChain)
		{
		}
	}
?>
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.