public function testEvaluate_roleHierarchyInvolved_variablesContainsProperRoles() { $roleHierarchy = \Mockery::mock(RoleHierarchy::class)->shouldReceive('getReachableRoles')->with(['ADMIN'])->andReturn(['ADMIN', 'MANAGER', 'USER'])->getMock(); $this->evaluator = new ExpressionEvaluator($this->securityContext, $this->user, $this->language, $roleHierarchy); $this->user->shouldReceive('getRoles')->andReturn(['ADMIN']); $identity = \Mockery::mock(IIdentity::class); $this->user->shouldReceive('getIdentity')->andReturn($identity); $request = \Mockery::mock(Request::class)->shouldReceive('getParameters')->andReturn([])->getMock(); $expr = \Mockery::mock(Expression::class); $this->language->shouldReceive('evaluate')->with($expr, \Mockery::on(function ($variables) { return $variables['roles'] === ['ADMIN', 'MANAGER', 'USER']; }))->once(); $this->evaluator->evaluate($expr, $request); }
/** * @param ClassType|Method $element * @param Request $request * @return bool * @throws \InvalidArgumentException */ public function checkRequirement($element, Request $request) { if ($element instanceof ClassType) { $expressions = $this->getClassExpressionsToEvaluate($element); } else { if ($element instanceof Method) { $expressions = $this->getMethodExpressionsToEvaluate($element); } else { throw new \InvalidArgumentException("Argument 'element' must be instanceof Nette\\Reflection\\ClassType or Nette\\Reflection\\Method"); } } if (!empty($expressions)) { foreach ($expressions as $expression) { $result = $this->expressionEvaluator->evaluate($expression, $request); if (!$result) { $this->failedExpression = $expression; return false; } } } return true; }