Here is the best way to evaluate if a user can view a list. I had many problems with a web part and after investigations, this method resolve the problems.
Read the comments in the code to learn more about it!
|public bool UserCanViewListItems(SPWeb web, SPList list)|
|bool res = true;|
|SPWeb myweb = null;|
|SPSite mysite = null;|
|/* There is a kind of ownership problem related to the DoesUserHavePermissions.|
|* To fix that problem, the user performing the execution of the method, needs to|
|* be the same as the one who created the Parent Object. For this reason, This|
|* Method use the List object received in param and recreate the Parent object to|
|* get the ownership. And it works perfectly.*/|
|mysite = new SPSite(list.ParentWeb.Url);|
|myweb = mysite.OpenWeb();|
|list = myweb.Lists[list.Title];|
|res = false;|