When using the CSOM Microsoft.SharePoint.Client.Web.GetSubWebsForCurrentUser returns a 'security trimmed' collection of all sub webs that the current user has access to.
e.g.
string currentWeb = website.Title; // Just prove have access to root website
var subWebs = website.GetSubwebsForCurrentUser(null);
clientContext.Load(subWebs);
clientContext.ExecuteQuery();
What could cause this method to throw an Access Denied exception (at ExecuteQuery) when the user DOES appear to have access to the main site and sub-sites. Isn't avoiding Access Denied the whole purpose of this method?