private void RecursiveProcess(IOguObject oguObject) { if (oguObject != null && SynchronizeContext.Current.IsIncluded(oguObject)) { SynchronizeContext.Current.ExtendLockTime(); SynchronizeContext.Current.CurrentOguObject = oguObject; Debug.WriteLine("递归:OGU对象:" + oguObject.FullPath); //AD中是否找到对应的权限中心的对象 ADObjectWrapper adObject = ADObjectFinder.Find(oguObject); if (oguObject.ObjectType == SchemaType.Groups) { SynchronizeContext.Current.PrepareGroupToTakeCare(oguObject); //需注意的群组 } if (adObject == null) //没找到,新增 { if (SynchronizeContext.Current.IsRealObject(oguObject)) { Trace.WriteLine("AD中不存在决定新增" + oguObject.FullPath); SynchronizeContext.Current.PrepareAndAddModifiedItem(oguObject, adObject, ObjectModifyType.Add); } else { Trace.WriteLine("不要新增AD中实际不存在的对象" + oguObject.FullPath); } } else { if (SynchronizeContext.Current.IsRealObject(oguObject)) { //比较已经找到的两个对象的差异 Trace.Write("AD中存在,比较差异……"); //比较差异,也要考虑时间戳是否变化 ObjectModifyType compareResult = ObjectComparerHelper.Compare(oguObject, adObject); Trace.WriteLine(compareResult); if (compareResult != ObjectModifyType.None) // 修改 { SynchronizeContext.Current.PrepareAndAddModifiedItem(oguObject, adObject, compareResult); } } else { Trace.WriteLine("实际不存在,该删掉的对象:" + oguObject.FullPath); } } if (oguObject.ObjectType == SchemaType.Organizations) { //组织要检查是否有删除项,然后递归 ProcessOrganization((IOrganization)oguObject, adObject); } } }
public override void Convert(ObjectModifyType modifyType, IOguObject srcObject, DirectoryEntry targetObject, string context) { SetterContext setterContext = new SetterContext(); ConvertProperties(srcObject, targetObject, setterContext); targetObject.CommitChanges(); DoAfterObjectUpdatedOP(srcObject, targetObject, setterContext); }
private static void DeleteADObject(ObjectModifyType modifyType, IOguObject oguObject, ADObjectWrapper adObject) { ADHelper adHelper = SynchronizeContext.Current.ADHelper; using (DirectoryEntry entry = SynchronizeHelper.GetSearchResultByID(adHelper, adObject.NativeGuid).GetDirectoryEntry()) { entry.ForceBound(); ObjectSetterHelper.Convert(modifyType, oguObject, entry); } }
private static void ModifyADObjectProperties(ObjectModifyType modifyType, ModifiedItem item) { IOguObject oguObject = item.OguObjectData; ADObjectWrapper adObject = item.ADObjectData; using (DirectoryEntry entry = SynchronizeHelper.GetSearchResultByID(SynchronizeContext.Current.ADHelper, adObject.NativeGuid, (ADSchemaType)oguObject.ObjectType).GetDirectoryEntry()) { entry.ForceBound(); ObjectSetterHelper.Convert(modifyType, oguObject, entry); } }
public override void Convert(ObjectModifyType modifyType, IOguObject srcObject, DirectoryEntry targetObject, string context) { SetterContext setterContext = new SetterContext(); ConvertProperties(srcObject, targetObject, setterContext); targetObject.CommitChanges(); if (!ObjectComparerHelper.AreParentPathEqaul(srcObject, targetObject)) MoveItemToNewPath(srcObject, targetObject); DoAfterObjectUpdatedOP(srcObject, targetObject, setterContext); }
protected override void ProcessDeleteEntry(ObjectModifyType modifyType, IOguObject srcObject, DirectoryEntry targetObject, string context) { List<ADObjectWrapper> allChildren = targetObject.FindAllChildrenUser(); foreach (ADObjectWrapper child in allChildren) { using (DirectoryEntry subEntry = SynchronizeHelper.GetSearchResultByID(SynchronizeContext.Current.ADHelper, child.NativeGuid).GetDirectoryEntry()) { subEntry.ForceBound(); DisableAccount(subEntry); } } }
public override void Convert(ObjectModifyType modifyType, IOguObject srcObject, DirectoryEntry targetObject, string context) { SetterContext setterContext = new SetterContext(); ConvertProperties(srcObject, targetObject, setterContext); targetObject.CommitChanges(); if (SynchronizeContext.Current.DefaultPassword.IsNotEmpty()) targetObject.Invoke("SetPassword", SynchronizeContext.Current.DefaultPassword); DoAfterObjectUpdatedOP(srcObject, targetObject, setterContext); }
protected override void ProcessDeleteEntry(ObjectModifyType modifyType, IOguObject srcObject, DirectoryEntry targetObject, string context) { List <ADObjectWrapper> allChildren = targetObject.FindAllChildrenUser(); foreach (ADObjectWrapper child in allChildren) { using (DirectoryEntry subEntry = SynchronizeHelper.GetSearchResultByID(SynchronizeContext.Current.ADHelper, child.NativeGuid).GetDirectoryEntry()) { subEntry.ForceBound(); DisableAccount(subEntry); } } }
public override ObjectModifyType Compare(IOguObject srcObject, ADObjectWrapper targetObject) { ObjectModifyType result = CompareProperties(srcObject, targetObject); //if (IsChildrenModified(srcObject, targetObject)) // result |= ObjectModifyType.ChildrenModified; if (targetObject.Properties.Contains("displayNamePrintable") == false || SynchronizeHelper.PermissionCenterInvolved.Equals(targetObject.Properties["displayNamePrintable"]) == false) { result |= ObjectModifyType.MissingMarker; } return(result); }
public override void Convert(ObjectModifyType modifyType, IOguObject srcObject, DirectoryEntry targetObject, string context) { SetterContext setterContext = new SetterContext(); ConvertProperties(srcObject, targetObject, setterContext); targetObject.CommitChanges(); if (!ObjectComparerHelper.AreParentPathEqaul(srcObject, targetObject)) { MoveItemToNewPath(srcObject, targetObject); } DoAfterObjectUpdatedOP(srcObject, targetObject, setterContext); }
public override void Convert(ObjectModifyType modifyType, IOguObject srcObject, DirectoryEntry targetObject, string context) { SetterContext setterContext = new SetterContext(); ConvertProperties(srcObject, targetObject, setterContext); targetObject.CommitChanges(); if (SynchronizeContext.Current.DefaultPassword.IsNotEmpty()) { targetObject.Invoke("SetPassword", SynchronizeContext.Current.DefaultPassword); } DoAfterObjectUpdatedOP(srcObject, targetObject, setterContext); }
protected ObjectModifyType CompareProperties(IOguObject srcObject, ADObjectWrapper targetObject) { SchemaMappingInfo mappingInfo = PermissionCenterToADSynchronizeSettings.GetConfig().SchemaMappings.GetSchemaMappingInfo(srcObject.ObjectType.ToString()); ObjectModifyType result = ObjectModifyType.None; foreach (ComparerPropertyMappingConfigurationElement propertyComparerElement in mappingInfo.ComparedProperties) { if (propertyComparerElement.Comparer.Compare(srcObject, propertyComparerElement.Name, targetObject, propertyComparerElement.TargetPropertyName, propertyComparerElement.Context) == false) { result = ObjectModifyType.PropertyModified; Trace.Write("(修改的属性Key: " + propertyComparerElement.Name + ")"); break; } } return(result); }
public override void Convert(ObjectModifyType modifyType, IOguObject srcObject, DirectoryEntry targetObject, string context) { ADHelper adHelper = SynchronizeContext.Current.ADHelper; if (SynchronizeContext.Current.RecycleBinOU.IsNotEmpty()) { ProcessDeleteEntry(modifyType, srcObject, targetObject, context); //ChangeEntryNameToFullPath(targetObject); using (DirectoryEntry parentEntry = adHelper.NewEntry(SynchronizeContext.Current.RecycleBinOU)) { DoTheMove(targetObject, parentEntry, srcObject); } } else { targetObject.DeleteTree(); } }
public static void Convert(ObjectModifyType modifyType, IOguObject srcObject, DirectoryEntry targetObject) { SchemaType schemaType = GetOguSchemaType(targetObject); OguAndADObjectSetterBase setter = GetSetter(modifyType, schemaType); if (setter != null) { SchemaMappingInfo mappingInfo = PermissionCenterToADSynchronizeSettings.GetConfig().SchemaMappings.GetSchemaMappingInfo(schemaType.ToString()); string context = string.Empty; if (mappingInfo.ModifyOperations.ContainsKey(modifyType.ToString())) { SetterObjectMappingConfigurationElement objSetterMappingElement = mappingInfo.ModifyOperations[modifyType.ToString()]; context = objSetterMappingElement.Context; } setter.Convert(modifyType, srcObject, targetObject, context); } }
private static OguAndADObjectSetterBase GetSetter(ObjectModifyType modifyType, SchemaType schemaType) { string schemaTypeName = schemaType.ToString(); string cacheKey = "OguAndADObjectSetterBase" + "-" + modifyType.ToString() + "+" + schemaTypeName; return((OguAndADObjectSetterBase)ObjectContextCache.Instance.GetOrAddNewValue(cacheKey, (cache, key) => { SchemaMappingInfo mappingInfo = PermissionCenterToADSynchronizeSettings.GetConfig().SchemaMappings.GetSchemaMappingInfo(schemaTypeName); OguAndADObjectSetterBase setter = null; if (mappingInfo.ModifyOperations.ContainsKey(modifyType.ToString())) { SetterObjectMappingConfigurationElement objSetterMappingElement = mappingInfo.ModifyOperations[modifyType.ToString()]; setter = (OguAndADObjectSetterBase)PropertySettersSettings.GetConfig().ObjectSetters[objSetterMappingElement.OperationName].CreateInstance(); } cache.Add(cacheKey, setter); return setter; })); }
private static OguAndADObjectSetterBase GetSetter(ObjectModifyType modifyType, SchemaType schemaType) { string schemaTypeName = schemaType.ToString(); string cacheKey = "OguAndADObjectSetterBase" + "-" + modifyType.ToString() + "+" + schemaTypeName; return (OguAndADObjectSetterBase)ObjectContextCache.Instance.GetOrAddNewValue(cacheKey, (cache, key) => { SchemaMappingInfo mappingInfo = PermissionCenterToADSynchronizeSettings.GetConfig().SchemaMappings.GetSchemaMappingInfo(schemaTypeName); OguAndADObjectSetterBase setter = null; if (mappingInfo.ModifyOperations.ContainsKey(modifyType.ToString())) { SetterObjectMappingConfigurationElement objSetterMappingElement = mappingInfo.ModifyOperations[modifyType.ToString()]; setter = (OguAndADObjectSetterBase)PropertySettersSettings.GetConfig().ObjectSetters[objSetterMappingElement.OperationName].CreateInstance(); } cache.Add(cacheKey, setter); return setter; }); }
public void PrepareAndAddModifiedItem(IOguObject oguObject, ADObjectWrapper adObject, ObjectModifyType objectModifyType) { ModifiedItem item = new ModifiedItem() { OguObjectData = oguObject, ADObjectData = adObject, ModifyType = objectModifyType }; if (oguObject.ObjectType == SchemaType.Groups) { this.ModifiedGroupItems.Add(item); } else { this.ModifiedOuAndUserItems.Add(item); } }
/// <summary> /// 对象转换 /// </summary> /// <param name="modifyType"></param> /// <param name="srcObject"></param> /// <param name="targetObject"></param> /// <param name="context"></param> public abstract void Convert(ObjectModifyType modifyType, TSource srcObject, TTarget targetObject, string context);
private static void ModifyADGroupChildren(ObjectModifyType modifyType, ModifiedItem item) { ADHelper adHelper = SynchronizeContext.Current.ADHelper; IOguObject oguObject = item.OguObjectData; ADObjectWrapper adObject = item.ADObjectData; using (DirectoryEntry entry = SynchronizeHelper.GetSearchResultByID(adHelper, adObject.NativeGuid, ADSchemaType.Groups).GetDirectoryEntry()) { entry.ForceBound(); ObjectSetterHelper.Convert(modifyType, oguObject, entry); } }
protected override void ProcessDeleteEntry(ObjectModifyType modifyType, IOguObject srcObject, DirectoryEntry targetObject, string context) { DisableAccount(targetObject); }
protected virtual void ProcessDeleteEntry(ObjectModifyType modifyType, IOguObject srcObject, DirectoryEntry targetObject, string context) { }