public static IEnumerable <T> GetItems <T>(this ISecurityStorage storage) where T : IStorageEntity { return(storage.GetItems(typeof(T)).Cast <T>()); }
private void Sync() { IEnumerable <IStorageSecurityItem> storageSecurityItems = _securityStorage.GetItems <IStorageSecurityItem>(); IEnumerable <IStorageSecurityItemRelation> storageSecurityItemRelations = _securityStorage.GetItems <IStorageSecurityItemRelation>(); IEnumerable <IStorageSecurityIdentity> storageSecurityIdentities = _securityStorage.GetItems <IStorageSecurityIdentity>(); IEnumerable <IStorageSecurityIdentityRelation> storageSecurityIdentityRelations = _securityStorage.GetItems <IStorageSecurityIdentityRelation>(); IEnumerable <IStorageAccessAuthorization> storageAccessAuthorizations = _securityStorage.GetItems <IStorageAccessAuthorization>(); IEnumerable <IStorageConditionAuthorization> storageConditionAuthorizations = _securityStorage.GetItems <IStorageConditionAuthorization>(); IEnumerable <IStorageBag> storageBags = _securityStorage.GetItems <IStorageBag>(); _ignoreEvents = true; Suspend(); try { Dictionary <string, ISecurityItem> securityItems = SyncSecurityItems(storageSecurityItems); SyncSecurityItemRelations(storageSecurityItemRelations, securityItems); Dictionary <string, ISecurityIdentity> securityIdentities = SyncSecurityIdentity(storageSecurityIdentities); SyncSecurityIdentityRelations(storageSecurityIdentityRelations, securityIdentities); Dictionary <string, IAuthorization> accessAuthorizations = SyncAccessAuthorizations(storageAccessAuthorizations, securityItems, securityIdentities); Dictionary <string, IAuthorization> conditionAuthorizations = SyncConditionAuthorizations(storageConditionAuthorizations, securityItems, securityIdentities); HashSet <IStorageBag> bags = new HashSet <IStorageBag>(storageBags, new StorageBagComparer()); foreach (IStorageBag storageBag in bags) { if (securityItems.TryGetValue(storageBag.TargetId, out ISecurityItem securityItem)) { securityItem.Bag[storageBag.Key] = storageBag.Value; } if (securityIdentities.TryGetValue(storageBag.TargetId, out ISecurityIdentity securityIdentity)) { securityIdentity.Bag[storageBag.Key] = storageBag.Value; } if (accessAuthorizations.TryGetValue(storageBag.TargetId, out IAuthorization accessAuthorization)) { accessAuthorization.Bag[storageBag.Key] = storageBag.Value; } if (conditionAuthorizations.TryGetValue(storageBag.TargetId, out IAuthorization conditionAuthorization)) { conditionAuthorization.Bag[storageBag.Key] = storageBag.Value; } } HashSet <IStorageBag> newBags = new HashSet <IStorageBag>(new StorageBagComparer()); foreach (IBagObject bagObject in _store.SecurityItems.Cast <IBagObject>().Concat(_store.Authorizations).Concat(_store.SecurityIdentities)) { foreach (string bagKey in bagObject.Bag.Keys) { StorageBag storageBag = new StorageBag(bagObject.Id, bagKey, bagObject.Bag[bagKey]); if (!bags.Contains(storageBag)) { newBags.Add(storageBag); } } } if (newBags.Count > 0) { AddNewAction(StorageActionType.Add, newBags); } } finally { _ignoreEvents = false; Resume(); } }