/// <summary> /// Gets all user groups. /// </summary> /// <returns></returns> public virtual IList <UserGroup> GetAllUserGroups() { if (_userGroups != null) { return(_userGroups); } Domain domain = Domain.GetDomain(_sitecoreContext.BackendDomainName); IList <Role> sitecoreDomainRoles = domain.GetRoles().ToList(); IList <UserGroup> existingUserGroups = UserGroup.All().ToList(); //If number of roles matches in both ends we assume everything is up to date. if (sitecoreDomainRoles.Count == existingUserGroups.Count) { _userGroups = sitecoreDomainRoles.Select(x => MapExternalUserGroupToInternalUserGroup(x.LocalName)).ToList(); return(_userGroups); } lock (_lock) { var roleNamesNotCreatedAsUserGroups = sitecoreDomainRoles.Where(x => existingUserGroups.All(y => y.ExternalId != x.LocalName)).Select(x => x.LocalName).ToList(); var newGroups = MapExternalUserGroupsToInternalUserGroups(roleNamesNotCreatedAsUserGroups); ObjectFactory.Instance.Resolve <IRepository <UserGroup> >().Save(newGroups); var allGroups = existingUserGroups.Concat(newGroups).ToList(); _userGroups = allGroups; return(_userGroups); } }