コード例 #1
0
 /**
  * @description create an object
  * @throws Exception
  * @param string $type
  * @param null|int $id
  * @author Se#
  * @version 0.0.1
  */
 public function __construct($type, $id = null)
 {
     parent::__construct($type, $id);
     foreach ($this->_required as $field => $tp) {
         if (!isset($this->_info['metadata'][$field]) || $tp != $this->_info['metadata'][$field]['DATA_TYPE']) {
             throw new Exception('Missed or wrong type required by ' . get_class($this) . ' field "' . $field . '" in "' . $this->_info['name'] . '"');
         }
     }
 }
コード例 #2
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;
 }