public void Test_TraceCacheInvalidations_CanCreate(SecurityTraceLevel traceLevel)
        {
            EntityType entityType;
            EntityAccessControlService entityAccessControlService;
            UserAccount userAccount;
            int         expectedOccurrences;

            userAccount = new UserAccount
            {
                Name = "Test User " + Guid.NewGuid()
            };
            userAccount.Save();

            entityType = new EntityType();
            entityType.Save();

            entityAccessControlService = new EntityAccessControlService(
                new EntityAccessControlChecker(), () => (int)traceLevel);

            using (new SetUser(userAccount))
            {
                entityAccessControlService.CanCreate(entityType);
            }

            expectedOccurrences = -1;
            switch (traceLevel)
            {
            case SecurityTraceLevel.DenyVerbose:
            case SecurityTraceLevel.DenyBasic:
            case SecurityTraceLevel.AllVerbose:
            case SecurityTraceLevel.AllBasic:
                expectedOccurrences = 1;
                break;

            case SecurityTraceLevel.None:
                expectedOccurrences = 0;
                break;

            default:
                Assert.Fail("Unknown security trace level.");
                break;
            }

            IList <LogActivityLogEntry> activityLogEntries;

            activityLogEntries = Entity.GetInstancesOfType <LogActivityLogEntry>().ToList();
            Assert.That(activityLogEntries,
                        Has.Exactly(expectedOccurrences)
                        .Property("LogEntrySeverity_Enum").EqualTo(LogSeverityEnum_Enumeration.InformationSeverity).And
                        .Property("LogEventTime").EqualTo(DateTime.UtcNow).Within(TimeSpan.FromSeconds(10)).And
                        .Property("Description").StartsWith(
                            string.Format(
                                "Access control check: Does user '{0}' have '{1}' access to entity(ies) '{2}'",
                                userAccount.Name, Permissions.Create.Alias, entityType.Id)));
        }
Esempio n. 2
0
        /// <summary>
        ///     Initializes a new instance of the <see cref="SecurityTraceListener" /> class.
        /// </summary>
        /// <param name="traceLevel">The trace level.</param>
        public SecurityTraceListener(SecurityTraceLevel traceLevel)
        {
            _traceLevel = traceLevel;

            /////
            // Remove the default listener and replace it with this one.
            /////
            Trace.Listeners.Add(this);
            Trace.Listeners.Remove("Default");

            /////
            // Single threaded to ensure ordered output.
            /////
            _workerThread = new Thread(ProcessMessageQueue)
            {
                IsBackground = true,
                Name         = "SecurityTraceListener"
            };

            _workerThread.Start( );
        }