Cache result when we can, so queries aren't multiplicative with roles on each page load