In (the now famous) Project P, working with Microsoft CMS’s security model had me ripping my hair out.
Whenever I made a call to the context.Searches.GetByGuid() method, the system would throw a COMException, citing the quite unhelpful message “Server Error. Please contact your administrator”
For future reference (in case anyone comes across this themselves) the problem was caused because the GUID i was passing into the application was not formatted in the correctly for what CMS was expecting.
My code was doing:
string inputGuid = myGuid.ToString();
But it turns out it actually needed to be:
string inputGuid = myGuid.ToString(“B”);
The difference (according to MSDN) is that .ToString() with no overload assumes the format identifier of “D” which results in a GUID formatted without curly braces. Format “B” provides the same guid string but with curly braces.
Why this needed to throw a “Server error” exception, is beyond me. A simple ArgumentException would have sufficed, or better still it could take in a Guid as the parameter instead of a string.
For a blow-by-blow account of this problem, visit my newsgroup post about UserHasRightToBrowse Always Returns True