Ejemplo n.º 1
0
 public function _check($subject, $controller, $action)
 {
     $decisions = array();
     $object = Zend_Registry::get('userid');
     $user = new Evil_Object_Fixed('user', $object);
     $role = $user->getValue('role');
     $logger = Zend_Registry::get('logger');
     Zend_Wildfire_Plugin_FirePhp::group('Access');
     $conditions = array('controller', 'action', 'object', 'subject', 'role');
     foreach (self::$_rules as $ruleName => $rule) {
         $selected = true;
         foreach ($conditions as $condition) {
             if (isset($rule[$condition])) {
                 if (is_array($rule[$condition])) {
                     if (!in_array(${$condition}, $rule[$condition])) {
                         $selected = false;
                         break;
                     }
                 } elseif ($rule[$condition] != ${$condition}) {
                     $selected = false;
                     break;
                 }
             }
         }
         if ($selected) {
             $decisions[(int) $rule['weight']] = $rule['decision'];
             $logger->log($ruleName . ' applicable!', Zend_Log::INFO);
         }
     }
     if (count($decisions) > 0) {
         $decision = $decisions[max(array_keys($decisions))];
         $logger->info('Вердикт: ' . $decision);
     } else {
         throw new Exception('No rules applicable');
     }
     Zend_Wildfire_Plugin_FirePhp::groupEnd('Access');
     return $decision;
 }