/** * @param string|array|AssertionInterface $assertion * @return null|AssertionInterface */ protected function normalizeAssertion($assertion) { if (!$assertion) { return; } if ($assertion instanceof AssertionInterface) { return $assertion; } $assertion = (array) $assertion; if (count($assertion) > 1) { $assertionAggregate = new AssertionAggregate(); foreach ($ruleData['assertion'] as $plugin) { if (is_string($plugin) && $this->assertionPluginManager->has($plugin)) { $plugin = $this->assertionPluginManager->get($plugin); } if ($plugin instanceof AssertionInterface) { $assertionAggregate->addAssertion($plugin); } } return $assertionAggregate; } $assertion = reset($assertion); if (!$assertion instanceof AssertionInterface) { if (is_string($assertion) && $this->assertionPluginManager->has($assertion)) { $assertion = $this->assertionPluginManager->get($assertion); } else { $assertion = null; } } return $assertion; }
/** * @param array $rule * @throws InvalidRuleException * @return Rule */ protected function loadRule(array $rule) { switch (count($rule)) { case 4: list($roles, $resources, $privileges, $assertion) = $rule; if (is_string($assertion)) { $assertion = $this->assertionPluginManager->get($assertion); } return new Rule($roles, $resources, $privileges, $assertion); case 3: list($roles, $resources, $privileges) = $rule; return new Rule($roles, $resources, $privileges); case 2: list($roles, $resources) = $rule; return new Rule($roles, $resources); default: throw new InvalidRuleException('Invalid rule definition: ' . print_r($rule, true)); } }