Tiago,
While it's technically possible for the SiteMapProvider to not cache it's data and requery every time (to get per user data), it will have extremely poor performance and a very high query rate.
The best technique for this kind of design is to cache the entire sitemap data (for ALL users) in memory and use logic in each of the query functions (CurrentNode, RootNode, ParentNode, ChildNodes, FindSiteMapNode, etc) that are able to filter the in-memory data per user as it is returned.
The alternative is to cache the per-user data as it is retreived so that you don't constantly requery the data but this has the potential to easily exceed the memory requirements of the first suggestion.
--
Danny
disclaimer: Information provided is 'as is' and conveys no warranties or guarantees.