public function doCheckUser($user, $ability, $object)
{
$cacheKey = serialize([$ability, $user === null ? null : $user->getKey(), $object === null ? null : $object->getKey()]);
if (!isset($this->cache[$cacheKey])) {
if ($user !== null && $user->isAdmin()) {
$message = 'ok';
} else {
$function = "check{$ability}";
try {
$message = $this->{$function}($user, $object);
} catch (AuthorizationException $e) {
$message = $e->getMessage();
}
}
$this->cache[$cacheKey] = new AuthorizationResult($message);
}
return $this->cache[$cacheKey];
}