/// <summary> /// Starts the security subsystem using the passed configuration. /// Call this method only once in your application's startup sequence. /// The method prepares and memorizes the main components for /// creating SecurityContext instances in a fastest possible way. /// The main components are global objects: /// ISecurityDataProvider instance, IMessageProvider instance and SecurityCache instance. /// </summary> protected static void StartTheSystem(SecurityConfiguration configuration) { _generalContext = null; // The messageprovider provider must receive ongoing activities at this time. StartedAt = DateTime.UtcNow; int lastActivityIdFromDb; var uncompleted = DataHandler.LoadCompletionState(configuration.SecurityDataProvider, out lastActivityIdFromDb); _messageProvider = configuration.MessageProvider; _messageProvider.MessageReceived += MessageProvider_MessageReceived; Configuration.Identities.SystemUserId = configuration.SystemUserId ?? -1; Configuration.Identities.VisitorUserId = configuration.VisitorUserId ?? 6; Configuration.Identities.EveryoneGroupId = configuration.EveryoneGroupId ?? 8; Configuration.Identities.OwnerGroupId = configuration.OwnerGroupId ?? 9; Configuration.Messaging.CommunicationMonitorRunningPeriodInSeconds = configuration.CommunicationMonitorRunningPeriodInSeconds ?? 30; Configuration.Messaging.SecuritActivityLifetimeInMinutes = configuration.SecuritActivityLifetimeInMinutes ?? 42; Configuration.Messaging.SecuritActivityTimeoutInSeconds = configuration.SecuritActivityTimeoutInSeconds ?? 120; _securityDataProviderPrototype = configuration.SecurityDataProvider; PermissionTypeBase.InferForcedRelations(); using (var op = SnTrace.Security.StartOperation("Security initial loading.")) { _cacheHolder = SecurityCache.Initialize(configuration.SecurityDataProvider); op.Successful = true; } CommunicationMonitor.Initialize(); _generalContext = new SecurityContext(SystemUser); SecurityActivityQueue.Startup(uncompleted, lastActivityIdFromDb); _killed = false; }
public void Start() { GeneralSecurityContext = null; // The message provider must receive ongoing activities at this time. StartedAt = DateTime.UtcNow; var uncompleted = DataHandler.LoadCompletionState(out var lastActivityIdFromDb); PermissionTypeBase.InferForcedRelations(); using (var op = SnTrace.Security.StartOperation("Security initial loading.")) { var cache = new SecurityCache(DataHandler); cache.Initialize(); Cache = cache; op.Successful = true; } EntityManager = new SecurityEntityManager(Cache, DataHandler, MissingEntityHandler); Cache.EntityManager = EntityManager; // Property injection DataHandler.EntityManager = EntityManager; // Property injection PermissionQuery = new PermissionQuery(EntityManager, Cache); CommunicationMonitor = new CommunicationMonitor(DataHandler, Options.Create(MessagingOptions)); GeneralSecurityContext = new SecurityContext(SystemUser, this); SecurityActivityQueue = new SecurityActivityQueue(this, CommunicationMonitor, DataHandler, ActivityHistory); SecurityActivityQueue.Startup(uncompleted, lastActivityIdFromDb); ActivityHistory.SecurityActivityQueue = SecurityActivityQueue; // Property injection MessageProvider.MessageReceived += MessageProvider_MessageReceived; MessageProvider.Initialize(); MessageProvider.Start(StartedAt); _killed = false; }
public SecurityEntityManager(SecurityCache cache, DataHandler dataHandler, IMissingEntityHandler missingEntityHandler) { _missingEntityHandler = missingEntityHandler; _cache = cache; _dataHandler = dataHandler; }
public PermissionQuery(SecurityEntityManager entityManager, SecurityCache cache) { _entityManager = entityManager; _cache = cache; }