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))); }
/// <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( ); }