public function check($user, $params, array $options = array())
{
$defaults = array('rules' => $this->_config['default'], 'allowAny' => $this->_config['allowAny']);
$options += $defaults;
$user = $user ?: $this->_config['user']();
if (!$options['rules']) {
$base = array('rule' => false, 'message' => null, 'redirect' => null);
return array_diff_key($options, $defaults) + $base;
}
$rules = isset($options['rules']['rule']) ? array($options['rules']) : $options['rules'];
$result = array();
foreach ($rules as $rule) {
if (is_string($rule)) {
$rule = compact('rule');
}
$ruleResult = $this->_call($rule, $user, $params['request'], $options);
switch (true) {
case $ruleResult === false && $options['allowAny']:
$result = $rule + array_diff_key($options, $defaults);
break;
case $ruleResult === false:
return $rule + array_diff_key($options, $defaults);
case $ruleResult !== false && $options['allowAny']:
return array();
}
}
return $result;
}