public PermissionService(ISecurityObjectRepository SecObjectRepository, CurrentUserProvider CurrentUser,
                          ILogger <PermissionService> _logger)
 {
     this.secObjectRepository = SecObjectRepository;
     this.CurrentUser         = CurrentUser;
     this._logger             = _logger;
 }
Пример #2
0
 public static void RemoveBuilders(this ISecurityObjectRepository securityObjectRepository, IEnumerable <SecurityObjectBuilder> builders)
 {
     foreach (SecurityObjectBuilder builder in builders)
     {
         securityObjectRepository.RemoveBuilder(builder);
     }
 }
 public UserSecurityObjectsHandler(
     CurrentUserProvider currentUserProvider,
     ISecurityObjectRepository secIdentityRepo)
 {
     CurrentUserProvider = currentUserProvider;
     SecIdentityRepo     = secIdentityRepo;
 }
Пример #4
0
 public SecurityProcessLoadObjects(DbContext securityDbContext, ISecurityObjectRepository securityObjectRepository, IPermissionProcessor permissionProcessor)
 {
     this.securityDbContext        = (BaseSecurityDbContext)securityDbContext;
     this.securityObjectRepository = securityObjectRepository;
     this.permissionProcessor      = permissionProcessor;
     fillSecurityObjects           = new FillSecurityObjects(permissionProcessor, this.securityDbContext.Model);
 }
Пример #5
0
        public static object GetSecurityObject(this ISecurityObjectRepository securityObjectRepository, object obj)
        {
            IEnumerable <SecurityObjectBuilder> resource = securityObjectRepository.GetAllBuilders();
            object securityObject = resource.FirstOrDefault(p => p.RealObject == obj)?.SecurityObject;

            if (securityObject == null)
            {
                securityObject = resource.FirstOrDefault(p => p.SecurityObject == obj)?.SecurityObject;
            }
            return(securityObject);
        }
 public SecuritySaveObjects(
     DbContext securityDbContext,
     ISecurityObjectRepository securityObjectRepository)
 {
     this.securityObjectRepository = securityObjectRepository;
     this.securityDbContext        = (BaseSecurityDbContext)securityDbContext;
     realDbContext              = this.securityDbContext.RealDbContext;
     saveAddedObjectsService    = new SaveAddedObjectsService(this.securityDbContext, securityObjectRepository);
     saveRemovedObjectsService  = new SaveRemovedObjectsService(this.securityDbContext, securityObjectRepository);
     saveModifiedObjectsService = new SaveModifiedObjectsService(this.securityDbContext, securityObjectRepository);
     trackPrimaryKeyService     = new TrackPrimaryKeyService(this.securityDbContext, securityObjectRepository);
 }
Пример #7
0
        public static List <string> GetBlockedMembers(this ISecurityObjectRepository securityObjectRepository, object securityObject)
        {
            IEnumerable <SecurityObjectBuilder> resource = securityObjectRepository.GetAllBuilders();
            SecurityObjectBuilder securityObjectMetaData = resource.FirstOrDefault(p => p.SecurityObject == securityObject);
            List <string>         blockedMembers         = new List <string>();

            if (securityObjectMetaData != null)
            {
                blockedMembers.AddRange(securityObjectMetaData.BlockedProperties);
                blockedMembers.AddRange(securityObjectMetaData.BlockedNavigationProperties);
            }
            return(blockedMembers);
        }
Пример #8
0
        public static IEnumerable <SecurityObjectBuilder> GetDuplicateBuilders(this ISecurityObjectRepository securityObjectRepository, IEnumerable <object> objects)
        {
            List <SecurityObjectBuilder>        dublicateBuilders = new List <SecurityObjectBuilder>();
            IEnumerable <SecurityObjectBuilder> allBuilders       = securityObjectRepository.GetAllBuilders();

            foreach (object obj in objects)
            {
                SecurityObjectBuilder builder = allBuilders.FirstOrDefault(p => Equals(p.RealObject, obj) || Equals(p.SecurityObject, obj));
                if (builder != null)
                {
                    dublicateBuilders.Add(builder);
                }
            }
            return(dublicateBuilders);
        }
Пример #9
0
        public static bool TryRemoveObject(this ISecurityObjectRepository securityObjectRepository, object targetObject)
        {
            bool result;
            IEnumerable <SecurityObjectBuilder> resource = securityObjectRepository.GetAllBuilders();
            SecurityObjectBuilder objToRemove            = resource.FirstOrDefault(p => p.SecurityObject == targetObject || p.RealObject == targetObject);

            if (objToRemove != null)
            {
                securityObjectRepository.RemoveBuilder(objToRemove);
                result = true;
            }
            else
            {
                result = false;
            }
            return(result);
        }
Пример #10
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);
        }
    }
Пример #11
0
 public TrackPrimaryKeyService(BaseSecurityDbContext securityDbContext, ISecurityObjectRepository securityObjectRepository)
 {
     this.securityDbContext        = securityDbContext;
     this.securityObjectRepository = securityObjectRepository;
 }
        public object CreateRealObject(IModel model, ISecurityObjectRepository securityObjectRepository)
        {
            Type targetType = SecurityObject.GetType();

            RealObject = Activator.CreateInstance(SecurityObject.GetType());
            IEntityType entityType = model.FindEntityType(targetType);
            IEnumerable <PropertyInfo> properiesInfo = targetType.GetRuntimeProperties();
            IEnumerable <INavigation>  navigations   = entityType.GetNavigations();

            IReadOnlyList <IProperty> primaryKeyProperties = entityType.FindPrimaryKey().Properties;

            foreach (PropertyInfo propertyInfo in properiesInfo)
            {
                object defaultValue = propertyInfo.GetValue(RealObject);
                defaultValueDictionary[propertyInfo.Name] = defaultValue;
                if (navigations.Any(p => p.Name == propertyInfo.Name))
                {
                    INavigation navigation = navigations.First(p => p.Name == propertyInfo.Name);
                    if (navigation.IsCollection())
                    {
                        IClrCollectionAccessor collectionAccessor              = navigation.GetCollectionAccessor();
                        IEnumerable            realObjectListPropertyValue     = (IEnumerable)propertyInfo.GetValue(RealObject);
                        IEnumerable            securityObjectListPropertyValue = (IEnumerable)propertyInfo.GetValue(SecurityObject);
                        if (securityObjectListPropertyValue != null && realObjectListPropertyValue != null)
                        {
                            foreach (object objectInListProperty in securityObjectListPropertyValue)
                            {
                                SecurityObjectBuilder metadata = securityObjectRepository.GetObjectMetaData(objectInListProperty);
                                if (metadata == null)
                                {
                                    metadata = new SecurityObjectBuilder();
                                    securityObjectRepository.RegisterBuilder(metadata);
                                    metadata.SecurityObject = objectInListProperty;
                                    metadata.CreateRealObject(model, securityObjectRepository);
                                }
                                collectionAccessor.Add(RealObject, metadata.RealObject);
                            }
                        }
                    }
                    else
                    {
                        object realValue = propertyInfo.GetValue(SecurityObject);
                        if (!Equals(realValue, null))
                        {
                            SecurityObjectBuilder metadata = securityObjectRepository.GetObjectMetaData(realValue);
                            if (metadata == null)
                            {
                                metadata = new SecurityObjectBuilder();
                                securityObjectRepository.RegisterBuilder(metadata);
                                metadata.SecurityObject = realValue;

                                metadata.CreateRealObject(model, securityObjectRepository);
                            }
                            if (propertyInfo.SetMethod != null)
                            {
                                propertyInfo.SetValue(RealObject, metadata.RealObject);
                            }
                        }
                    }
                }
                else
                {
                    bool isGeneratedPrimaryKey = false;
                    foreach (IProperty primaryKeyProperty in primaryKeyProperties)
                    {
                        if ((propertyInfo.Name == primaryKeyProperty.Name) && primaryKeyProperty.RequiresValueGenerator)
                        {
                            isGeneratedPrimaryKey = true;
                        }
                    }
                    if (propertyInfo.SetMethod != null && !isGeneratedPrimaryKey)
                    {
                        object securityValue = propertyInfo.GetValue(SecurityObject);
                        propertyInfo.SetValue(RealObject, securityValue);
                    }
                }
            }
            return(RealObject);
        }
        public object CreateSecurityObject(IModel model, ISecurityObjectRepository securityObjectRepository)
        {
            Type targetType = RealObject.GetType();

            SecurityObject = Activator.CreateInstance(RealObject.GetType());
            IEntityType entityType = model.FindEntityType(targetType);
            IEnumerable <PropertyInfo> propertiesInfo = targetType.GetRuntimeProperties();
            IEnumerable <INavigation>  navigations    = entityType.GetNavigations();

            foreach (PropertyInfo propertyInfo in propertiesInfo)
            {
                object defaultValue = propertyInfo.GetValue(SecurityObject);
                defaultValueDictionary[propertyInfo.Name] = defaultValue;
                if (this.IsPropertyBlocked(propertyInfo.Name))
                {
                    if (navigations.Any(p => p.Name == propertyInfo.Name))
                    {
                        INavigation navigation = navigations.First(p => p.Name == propertyInfo.Name);
                        if (navigation.IsCollection())
                        {
                            if (propertyInfo.SetMethod != null)
                            {
                                propertyInfo.SetValue(SecurityObject, null);
                            }
                        }
                    }
                    continue;
                }
                if (navigations.Any(p => p.Name == propertyInfo.Name))
                {
                    INavigation navigation = navigations.First(p => p.Name == propertyInfo.Name);
                    if (navigation.IsCollection())
                    {
                        IClrCollectionAccessor collectionAccessor         = navigation.GetCollectionAccessor();
                        IEnumerable            objectRealListProperty     = (IEnumerable)propertyInfo.GetValue(RealObject);
                        IEnumerable            objectSecurityListProperty = (IEnumerable)propertyInfo.GetValue(SecurityObject);
                        List <object>          denyObject;
                        BlockedObjectsInListProperty.TryGetValue(propertyInfo.Name, out denyObject);
                        if (objectRealListProperty != null)
                        {
                            foreach (object objInList in objectRealListProperty)
                            {
                                if (denyObject != null && denyObject.Contains(objInList))
                                {
                                    continue;
                                }
                                object objectToAdd;
                                SecurityObjectBuilder metadata = securityObjectRepository.GetObjectMetaData(objInList);
                                if (metadata != null)
                                {
                                    if (metadata.SecurityObject != null)
                                    {
                                        objectToAdd = metadata.SecurityObject;
                                    }
                                    else
                                    {
                                        objectToAdd = metadata.CreateSecurityObject(model, securityObjectRepository);
                                    }
                                }
                                else
                                {
                                    throw new Exception();
                                }
                                collectionAccessor.Add(SecurityObject, objectToAdd);
                            }
                        }
                    }
                    else
                    {
                        object realValue = propertyInfo.GetValue(RealObject);
                        SecurityObjectBuilder metadata = securityObjectRepository.GetObjectMetaData(realValue);
                        if (metadata != null && realValue != null)
                        {
                            if (metadata.SecurityObject == null)
                            {
                                metadata.SecurityObject = metadata.CreateSecurityObject(model, securityObjectRepository);
                            }
                            if (propertyInfo.SetMethod != null)
                            {
                                propertyInfo.SetValue(SecurityObject, metadata.SecurityObject);
                            }
                        }
                        else
                        {
                            if (propertyInfo.SetMethod != null)
                            {
                                propertyInfo.SetValue(SecurityObject, realValue);
                            }
                        }
                    }
                }
                else
                {
                    if (propertyInfo.SetMethod != null)
                    {
                        object realValue = propertyInfo.GetValue(RealObject);
                        propertyInfo.SetValue(SecurityObject, realValue);
                    }
                }
            }
            foreach (PropertyInfo propertyInfo in propertiesInfo)
            {
                object originalValue = propertyInfo.GetValue(SecurityObject);
                originalValueSecurityObjectDictionary.Add(propertyInfo.Name, originalValue);
            }

            if (SecurityObject is ISecurityEntity)
            {
                ISecurityEntity securityEntity = (ISecurityEntity)SecurityObject;

                List <string> blockedMembers = new List <string>();
                blockedMembers.AddRange(BlockedProperties);
                blockedMembers.AddRange(BlockedNavigationProperties);

                securityEntity.BlockedMembers = blockedMembers;
            }

            return(SecurityObject);
        }
 public SaveRemovedObjectsService(BaseSecurityDbContext securityDbContext,
                                  ISecurityObjectRepository securityObjectRepository)
 {
     this.securityDbContext        = securityDbContext;
     this.securityObjectRepository = securityObjectRepository;
 }
Пример #15
0
        public static SecurityObjectBuilder GetObjectMetaData(this ISecurityObjectRepository securityObjectRepository, object targetObject)
        {
            IEnumerable <SecurityObjectBuilder> resource = securityObjectRepository.GetAllBuilders();

            return(resource.FirstOrDefault(p => p.SecurityObject == targetObject || p.RealObject == targetObject));
        }