Exemple #1
0
        public override IList <User> GetAccessibleItemUsers(Access access)
        {
            using (var transaction = new TransactionScope(_configuration))
            {
                if (access.AllUsers)
                {
                    var userStore = new UserDataStore(transaction);
                    return(userStore.FindAll(_applicationName));
                }

                if (access.AllPersonTypes && access.AllSites)
                {
                    var userStore = new UserDataStore(transaction);
                    return(userStore.FindAll(_applicationName));
                }

                if (access.UserId != null)
                {
                    var userStore      = new UserDataStore(transaction);
                    var singleUserList = new List <User>();
                    singleUserList.Add(userStore.FindByName(_applicationName, access.UserId));
                    return(singleUserList);
                }

                if (access.AllPersonTypes && access.SiteId != null)
                {
                    var store = new PersonSiteDataStore(transaction);
                    IList <PersonSite> people = store.FindPersonsBySite(access.SiteId, false);
                    var userList  = new List <User>();
                    var userStore = new UserDataStore(transaction);

                    foreach (PersonSite person in people)
                    {
                        userList.Add(userStore.FindByPerson(_applicationName, person.Person.Id));
                    }

                    return(userList);
                }

                if (access.AllSites && access.PersonTypeId != null)
                {
                    var store = new PersonPersonTypeDataStore(transaction);
                    IList <PersonPersonType> people = store.FindPersonByPersonType(access.PersonTypeId);
                    var userList  = new List <User>();
                    var userStore = new UserDataStore(transaction);

                    foreach (PersonPersonType person in people)
                    {
                        userList.Add(userStore.FindByPerson(_applicationName, person.Person.Id));
                    }

                    return(userList);
                }

                if (access.SiteId != null && access.PersonTypeId != null)
                {
                    var userInPersonTypeStore = new PersonPersonTypeDataStore(transaction);
                    IList <PersonPersonType> personInPersonType =
                        userInPersonTypeStore.FindPersonByPersonType(access.PersonTypeId);

                    var userInSiteStore            = new PersonSiteDataStore(transaction);
                    IList <PersonSite> userInSites = userInSiteStore.FindPersonsBySite(access.SiteId, false);

                    //convert to a generic list to perform better search
                    var userInSitesList = new List <PersonSite>(userInSites);

                    var usersInBoth = new List <User>();

                    var userStore = new UserDataStore(transaction);

                    foreach (PersonPersonType personPersonType in personInPersonType)
                    {
                        if (
                            userInSitesList.Exists(
                                delegate(PersonSite ul) { return(ul.Person.Id == personPersonType.Person.Id); }))
                        {
                            usersInBoth.Add(userStore.FindByName(_applicationName, personPersonType.Person.Id));
                        }
                    }

                    return(usersInBoth);
                }

                return(new List <User>());
            }
        }