sealed protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (useRealProvider) { OnSecuredConfiguring(optionsBuilder); return; } BaseSecurityDbContext realContext = CreateDbContext(); RealDbContext = realContext; DbContextOptionsBuilder dbContextOptionsBuilderNative = new DbContextOptionsBuilder(); OnSecuredConfiguring(dbContextOptionsBuilderNative); realContext.useRealProvider = true; realContext.ChangeTracker.AutoDetectChangesEnabled = false; Type securityOptionExtensionType = typeof(SecurityOptionsExtension <>).MakeGenericType(GetType()); var securityOptionsExtension = Activator.CreateInstance(securityOptionExtensionType, this, dbContextOptionsBuilderNative); var builder = ((IDbContextOptionsBuilderInfrastructure)optionsBuilder); var methods = typeof(IDbContextOptionsBuilderInfrastructure).GetMethods(); MethodInfo methodInfoDbSet = methods.First(m => m.Name == "AddOrUpdateExtension").MakeGenericMethod(securityOptionExtensionType); methodInfoDbSet.Invoke(builder, new object[] { securityOptionsExtension }); }
public IEnumerable <TResult> Execute <TResult>(QueryContext queryContext) { lock (lockObject) { realDbContext = ((SecurityQueryContext)queryContext).dbContext.RealDbContext; nativeStateManager = realDbContext.GetService <IStateManager>(); dbContextSecurity = ((SecurityQueryContext)queryContext).dbContext; securityStateManager = (StateManager)queryContext.StateManager.Value; this.queryContext = queryContext; object resultQuery = GetQueryResult(); if (resultQuery == null) { return(new TResult[] { default(TResult) }); } //Security Block List <object> resultList = ConverterHelper.ResultToIEnumerableResult <TResult>(resultQuery).OfType <object>().ToList(); IEnumerable <object> result = dbContextSecurity.Security./*SecurityServicesProvider.*/ SecurityProcessLoadObjects.ProcessObjects(resultList); IEnumerable <object> allEntity = dbContextSecurity.Model.GetAllLinkedObjects(result); //end if (IsNeedSaveFlags(typeof(TResult))) { return(result.OfType <TResult>()); } StartInChangeTracking(allEntity); return(result.OfType <TResult>()); } }
public static IList <string> GetBlockedMembers(this EntityEntry entityEntry) { BaseSecurityDbContext securityDbContext = entityEntry.Context as BaseSecurityDbContext; ISecurityObjectRepository objectRepository = securityDbContext.Security.SecurityObjectRepository; object securityObject = objectRepository.GetSecurityObject(entityEntry.Entity); IList <string> blockedMembers = objectRepository.GetBlockedMembers(securityObject); if (blockedMembers == null) { blockedMembers = new List <string> { } } ; return(blockedMembers); } }
public SecurityQueryContextFactory([NotNull] DbContext dbContext, [NotNull] ICurrentDbContext currentContext, [NotNull] IStateManager stateManager, [NotNull] IConcurrencyDetector concurrencyDetector, [NotNull] IChangeDetector changeDetector) : base(currentContext, concurrencyDetector) { this.dbContext = (BaseSecurityDbContext)dbContext; this.stateManager = new LazyRef <IStateManager>(stateManager); this.concurrencyDetector = concurrencyDetector; }
public PermissionProcessor(IPermissionsProvider permissionsProvider, DbContext securityDbContext) { this.permissionsProvider = permissionsProvider; this.securityDbContext = (BaseSecurityDbContext)securityDbContext; }
// public StateManager stateManager; public SecurityQueryContext([NotNull] BaseSecurityDbContext dbContext, [NotNull] Func <IQueryBuffer> queryBufferFactory, [NotNull] IStateManager stateManager, [NotNull] IConcurrencyDetector concurrencyDetector) : base(queryBufferFactory, new LazyRef <IStateManager>(stateManager), concurrencyDetector) { this.dbContext = dbContext; }
public SecurityStrategy(DbContext dbContext) { securityDbContext = (BaseSecurityDbContext)dbContext; }