public static bool CanUserView(string username, string itemId) { IList <PersonType> myGroups = PersonManager.GetPersonTypesByUser(username); if (myGroups.FirstOrDefault(x => x.Name.Equals(BusiBlocksConstants.AdministratorsGroup)) != null) { return(true); } IList <Access> accesses = AccessManager.GetItemVisibilities(itemId); IList <Site> myLocations = SiteManager.GetSitesByUser(username, true); foreach (Access access in accesses) { //all users if (access.AllUsers) { return(true); } //all groups and all locations if (access.AllPersonTypes && access.AllSites) { return(true); } //this user if (access.UserId == username) { return(true); } //all groups and user location if (access.AllPersonTypes) { foreach (Site l in myLocations) { if (access.SiteId == l.Id) { return(true); } } } //all locations and user group if (access.AllSites) { foreach (PersonType ug in myGroups) { if (access.PersonTypeId == ug.Id) { return(true); } } } //user location and user group foreach (PersonType ug in myGroups) { foreach (Site l in myLocations) { if (access.PersonTypeId == ug.Id && access.SiteId == l.Id) { return(true); } } } } //no access return(false); }