[ Index ]

PHP Cross Reference of ACL Module

title

Body

[close]

/models/ -> ExtAccessControlFilter.php (source)

   1  <?php
   2  
   3  /**

   4   * This implements an extended Access Control Filter for integration with ACL

   5   * 

   6   * @package acl.base

   7   * @author dispy<dispyfree@googlemail.com>

   8   * @license LGPLv2

   9   */
  10  
  11  class ExtAccessControlFilter extends CAccessControlFilter{
  12      
  13      /**

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

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

  35       * @param IWebUser $user the user object

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

  37       */
  38      protected function isRoleMatched($user) {
  39          if (empty($this->roles))
  40              return true;
  41          
  42          //retrieve Collection

  43          $class = Strategy::getClass('Aro');
  44          $aro = $class::model()->find('foreign_key = :id AND model = :model',
  45                  array(':id' => $user->id, ':model' => RestrictedActiveRecord::$model)
  46                  );
  47          
  48          if(!$aro)
  49              return false;
  50          
  51          foreach ($this->roles as $role) {
  52              if($aro->is($role))
  53                  return true;
  54          }
  55          return false;
  56      }
  57  }
  58  ?>


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