コード例 #1
0
        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 });
        }
コード例 #2
0
        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>());
            }
        }
コード例 #3
0
        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);
        }
    }
コード例 #4
0
 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;
 }
コード例 #5
0
 public PermissionProcessor(IPermissionsProvider permissionsProvider, DbContext securityDbContext)
 {
     this.permissionsProvider = permissionsProvider;
     this.securityDbContext   = (BaseSecurityDbContext)securityDbContext;
 }
コード例 #6
0
 // 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;
 }
コード例 #7
0
 public SecurityStrategy(DbContext dbContext)
 {
     securityDbContext = (BaseSecurityDbContext)dbContext;
 }