Example #1
0
        private static void CheckMembershipConsistency(IEnumerable <int> groupIds, SecurityConsistencyResult result)
        {
            var secuCache = SecurityHandler.SecurityContext.GetCachedMembershipForConsistencyCheck();
            var secuDb    = SecurityHandler.SecurityContext.DataProvider.GetMembershipForConsistencyCheck();

            var repo = new List <long>();

            foreach (var head in groupIds.Select(NodeHead.Get).Where(h => h != null))
            {
                var groupIdBase  = Convert.ToInt64(head.Id) << 32;
                var userMembers  = new List <int>();
                var groupMembers = new List <int>();

                CollectSecurityIdentityChildren(head, userMembers, groupMembers);

                foreach (var userId in userMembers)
                {
                    repo.Add(groupIdBase + userId);
                }

                foreach (var groupId in groupMembers)
                {
                    repo.Add(groupIdBase + groupId);
                }
            }

            // ---------------------------------------------------------

            var missingInSecuCache = repo.Except(secuCache);

            foreach (var relation in missingInSecuCache)
            {
                result.AddMissingMembershipFromCache(unchecked ((int)(relation >> 32)), unchecked ((int)(relation & 0xFFFFFFFF)));
            }

            var missingInSecuDb = repo.Except(secuDb);

            foreach (var relation in missingInSecuDb)
            {
                result.AddMissingMembershipFromSecurityDb(unchecked ((int)(relation >> 32)), unchecked ((int)(relation & 0xFFFFFFFF)));
            }

            var unknownInSecuCache = secuCache.Except(repo);

            foreach (var relation in unknownInSecuCache)
            {
                result.AddUnknownMembershipInCache(unchecked ((int)(relation >> 32)), unchecked ((int)(relation & 0xFFFFFFFF)));
            }

            var unknownInSecuDb = secuDb.Except(repo);

            foreach (var relation in unknownInSecuDb)
            {
                result.AddUnknownMembershipInSecurityDb(unchecked ((int)(relation >> 32)), unchecked ((int)(relation & 0xFFFFFFFF)));
            }

            // ---------------------------------------------------------

            IEnumerable <long> missingInFlattening, unknownInFlattening;

            SecurityHandler.SecurityContext.GetFlatteningForConsistencyCheck(out missingInFlattening, out unknownInFlattening);

            foreach (var relation in missingInFlattening)
            {
                result.AddMissingRelationFromFlattenedUsers(unchecked ((int)(relation >> 32)), unchecked ((int)(relation & 0xFFFFFFFF)));
            }

            foreach (var relation in unknownInFlattening)
            {
                result.AddMissingRelationFromFlattenedUsers(unchecked ((int)(relation >> 32)), unchecked ((int)(relation & 0xFFFFFFFF)));
            }
        }