Advertisement
christiansalazarh

para detectar actions y controller

Nov 23rd, 2012
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 1.93 KB | None | 0 0
  1. // esto va en cruge/components/CrugeAuthManager.php
  2. // y se usa asi:  Yii::app()->user->rbac->autoDetect();
  3. // la nueva version de cruge lo traerá incorporado.
  4.  
  5.     /**
  6.      * enumControllers
  7.      *  lista los nombres de los controllers declarados.
  8.      * @access public
  9.      * @return array con nombre del controller
  10.      */
  11.     public function enumControllers(){
  12.         $a = array();
  13.         $p = Yii::app()->getControllerPath();
  14.         foreach(scandir($p) as $f){
  15.             if($f == '.' || $f == '..')
  16.                 continue;
  17.             if(strlen($f))
  18.                 if($f[0]=='.')
  19.                     continue;
  20.             if($pos = strpos(strtolower($f),"controller.php")){
  21.                 $a[] = substr($f,0, $pos);
  22.             }
  23.         }
  24.         return $a;
  25.     }
  26.  
  27.     /**
  28.      * enumActions
  29.      *  devuelve un array con los nombres de los actions del controller
  30.      * @param mixed $controllerName nombre del controller
  31.      * @access public
  32.      * @return array lista de actions.
  33.      */
  34.     public function enumActions($controllerName){
  35.         $a = array();
  36.         $className = $controllerName.'Controller';
  37.         Yii::import('application.controllers.'.$className,true);
  38.         $refx = new ReflectionClass($className);
  39.         foreach($refx->getMethods() as $method){
  40.             if($method->name != 'actions')
  41.             if(substr($method->name,0,6)=="action")
  42.                 $a[] = substr($method->name,6);
  43.         }
  44.         return $a;
  45.     }
  46.  
  47.     /**
  48.      * autoDetect
  49.      *  lee todos los controllers y actions y los almacena si previamente
  50.      *  no estaban registrados.
  51.      * @access public
  52.      * @return void
  53.      */
  54.     public function autoDetect(){
  55.         foreach($this->enumControllers() as $c){
  56.             // cada controller
  57.             $itemName = "controller_".strtolower($c);
  58.             if(!$this->getAuthItem($itemName))
  59.                 $this->createAuthItem($itemName,
  60.                         CAuthItem::TYPE_OPERATION,"");
  61.             // cada action
  62.             foreach($this->enumActions($c) as $action){
  63.                 $itemName = "action_".strtolower($c)."_".strtolower($action);
  64.                 if(!$this->getAuthItem($itemName))
  65.                     $this->createAuthItem($itemName,
  66.                         CAuthItem::TYPE_OPERATION,"");
  67.  
  68.             }
  69.         }
  70.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement