Change field access per user
The variable $user should probably be the parent entity of the field:
$user = $items-&gt;getEntity();

Which then when used as cache dependency should solve the caching issue:
$result-&gt;addCacheableDependency($user);

BTW you find the current user already in $account. If your access check depends on it then don't add it as object but use this predefined method for caching:
$result-&gt;cachePerUser();

But most times access code depends only on the current user roles and the resulting permissions, then you could use instead
$result-&gt;cachePerPermissions();

which is much better for cache performance.