Exemplo n.º 1
0
        public static bool IsEqual(this IList <AccessPolicyEntry> expected, IList <AccessPolicyEntry> actual)
        {
            if (expected == null && actual == null)
            {
                return(true);
            }

            if (expected == null || actual == null)
            {
                return(false);
            }

            if (expected.Count != actual.Count)
            {
                return(false);
            }

            AccessPolicyEntry[] expectedCopy = new AccessPolicyEntry[expected.Count];
            expected.CopyTo(expectedCopy, 0);

            foreach (AccessPolicyEntry a in actual)
            {
                var match = expectedCopy.Where(e =>
                                               e.TenantId == a.TenantId &&
                                               e.ObjectId == a.ObjectId &&
                                               e.ApplicationId == a.ApplicationId &&
                                               ((a.Permissions.Secrets == null && e.Permissions.Secrets == null) ||
                                                Enumerable.SequenceEqual(a.Permissions.Secrets, e.Permissions.Secrets)) &&
                                               ((a.Permissions.Keys == null && e.Permissions.Keys == null) ||
                                                Enumerable.SequenceEqual(a.Permissions.Keys, e.Permissions.Keys)) &&
                                               ((a.Permissions.Certificates == null && e.Permissions.Certificates == null) ||
                                                Enumerable.SequenceEqual(a.Permissions.Certificates, e.Permissions.Certificates)) &&
                                               ((a.Permissions.Storage == null && e.Permissions.Storage == null) ||
                                                Enumerable.SequenceEqual(a.Permissions.Storage, e.Permissions.Storage))
                                               ).FirstOrDefault();
                if (match == null)
                {
                    return(false);
                }

                expectedCopy = expectedCopy.Where(e => e != match).ToArray();
            }
            if (expectedCopy.Length > 0)
            {
                return(false);
            }

            return(true);
        }
Exemplo n.º 2
0
        private bool CompareAccessPolicies(AccessPolicyEntry[] expected, AccessPolicyEntry[] actual)
        {
            if (expected == null && actual == null)
            {
                return(true);
            }

            if (expected == null || actual == null)
            {
                return(false);
            }

            if (expected.Length != actual.Length)
            {
                return(false);
            }

            AccessPolicyEntry[] expectedCopy = new AccessPolicyEntry[expected.Length];
            expected.CopyTo(expectedCopy, 0);

            foreach (AccessPolicyEntry a in actual)
            {
                var match = expectedCopy.Where(e =>
                                               e.TenantId == a.TenantId &&
                                               e.ObjectId == a.ObjectId &&
                                               e.ApplicationId == a.ApplicationId &&
                                               ((a.Permissions.Secrets == null && e.Permissions.Secrets == null) ||
                                                Enumerable.SequenceEqual(e.Permissions.Secrets, a.Permissions.Secrets)) &&
                                               ((a.Permissions.Keys == null && e.Permissions.Keys == null) ||
                                                Enumerable.SequenceEqual(a.Permissions.Keys, a.Permissions.Keys))
                                               ).FirstOrDefault();
                if (match == null)
                {
                    return(false);
                }

                expectedCopy = expectedCopy.Where(e => e != match).ToArray();
            }
            if (expectedCopy.Length > 0)
            {
                return(false);
            }

            return(true);
        }