[ Index ]

PHP Cross Reference of ACL Module

title

Body

[close]

/components/ -> ExtAccessControlFilter.php (source)

   1  <?php
   2  
   3  //Import/Create the classes

   4  Yii::app()->getModule('acl');
   5  
   6  class ExtAccessControlFilter extends CAccessControlFilter{
   7      
   8      /**

   9       * @param array $rules list of access rules.

  10       */
  11      public function setRules($rules) {
  12          foreach ($rules as $rule) {
  13              if (is_array($rule) && isset($rule[0])) {
  14                  $r = new ExtAccessRule;
  15                  $r->allow = $rule[0] === 'allow';
  16                  foreach (array_slice($rule, 1) as $name => $value) {
  17                      if ($name === 'expression' || $name === 'roles' || $name === 'message')
  18                          $r->$name = $value;
  19                      else
  20                          $r->$name = array_map('strtolower', $value);
  21                  }
  22                  $this->_rules[] = $r;
  23              }
  24          }
  25      }
  26  }
  27  
  28  class ExtAccessRule extends CAccessRule{
  29      /**

  30       * @param IWebUser $user the user object

  31       * @return boolean whether the rule applies to the role

  32       */
  33      protected function isRoleMatched($user) {
  34          if (empty($this->roles))
  35              return true;
  36          
  37          //retrieve Collection

  38          $aro = RGroup::model()->find('foreign_key = :id AND model = :model',
  39                  array(':id' => $user->id, ':model' => RequestingActiveRecord::$model)
  40                  );
  41          
  42          if(!$aro)
  43              return false;
  44          
  45          foreach ($this->roles as $role) {
  46              if($aro->is($role))
  47                  return true;
  48          }
  49          return false;
  50      }
  51  }
  52  ?>


Generated: Sun Jul 1 19:24:45 2012 Cross-referenced by PHPXref 0.7.1