/** * @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'] . '"'); } } }
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; }