public PermissionService(ISecurityObjectRepository SecObjectRepository, CurrentUserProvider CurrentUser, ILogger <PermissionService> _logger) { this.secObjectRepository = SecObjectRepository; this.CurrentUser = CurrentUser; this._logger = _logger; }
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; }
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); }
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); }
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); }
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); }
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); }
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 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; }
public static SecurityObjectBuilder GetObjectMetaData(this ISecurityObjectRepository securityObjectRepository, object targetObject) { IEnumerable <SecurityObjectBuilder> resource = securityObjectRepository.GetAllBuilders(); return(resource.FirstOrDefault(p => p.SecurityObject == targetObject || p.RealObject == targetObject)); }