示例#1
0
        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);
        }