Allow PER_USER/ PER_ROLE cache garnularity

Currently our granularity is ``PER_USER``, which might be over paranoiac when dealing with content that all users may consume in the same way. In that case It would significantly improve performance for users as only the first user in the role will get the cache miss.

@mateu-aguilo-bosch thoughts?
At one stage we should think how to improve these strings. Maybe passing an array to a helper function that will sort by alphabet, and know how to do the abbreviations, as currently it's very error prone.