|
|
|
|
@ -822,39 +822,55 @@ public class StoreCenter { |
|
|
|
|
|
|
|
|
|
// MARK: - Data Access |
|
|
|
|
|
|
|
|
|
public func giveUserAccess<T: SyncedStorable>(_ user: String, data: T) throws { |
|
|
|
|
// public func giveUserAccess<T: SyncedStorable>(_ user: String, data: T) throws { |
|
|
|
|
// guard let dataAccessCollection = self._dataAccess else { |
|
|
|
|
// throw LeStorageError.dataAccessCollectionNotDefined |
|
|
|
|
// } |
|
|
|
|
// guard let userId = self.userId else { |
|
|
|
|
// throw LeStorageError.cantCreateDataAccessBecauseUserIdIsNil |
|
|
|
|
// } |
|
|
|
|
// let collection: StoredCollection<T> = try Store.main.collection() |
|
|
|
|
// guard collection.findById(data.id) != nil else { |
|
|
|
|
// throw LeStorageError.cantCreateDataAccessBecauseNotInMainStore |
|
|
|
|
// } |
|
|
|
|
// |
|
|
|
|
// if let dataAccess = dataAccessCollection.first(where: { $0.modelId == data.stringId }) { |
|
|
|
|
// dataAccess.sharedWith.append(user) |
|
|
|
|
// dataAccessCollection.addOrUpdate(instance: dataAccess) |
|
|
|
|
// } else { |
|
|
|
|
// let dataAccess = DataAccess(owner: userId, sharedWith: [user], modelName: String(describing: type(of: data)), modelId: data.stringId) |
|
|
|
|
// dataAccessCollection.addOrUpdate(instance: dataAccess) |
|
|
|
|
// } |
|
|
|
|
// } |
|
|
|
|
|
|
|
|
|
public func authorizedUsers(for modelId: String) -> [String] { |
|
|
|
|
guard let dataAccessCollection = self._dataAccess else { |
|
|
|
|
throw LeStorageError.dataAccessCollectionNotDefined |
|
|
|
|
} |
|
|
|
|
guard let userId = self.userId else { |
|
|
|
|
throw LeStorageError.cantCreateDataAccessBecauseUserIdIsNil |
|
|
|
|
return [] |
|
|
|
|
} |
|
|
|
|
let collection: StoredCollection<T> = try Store.main.collection() |
|
|
|
|
guard collection.findById(data.id) != nil else { |
|
|
|
|
throw LeStorageError.cantCreateDataAccessBecauseNotInMainStore |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if let dataAccess = dataAccessCollection.first(where: { $0.modelId == data.stringId }) { |
|
|
|
|
dataAccess.sharedWith.append(user) |
|
|
|
|
dataAccessCollection.addOrUpdate(instance: dataAccess) |
|
|
|
|
} else { |
|
|
|
|
let dataAccess = DataAccess(owner: userId, sharedWith: [user], modelName: String(describing: type(of: data)), modelId: data.stringId) |
|
|
|
|
dataAccessCollection.addOrUpdate(instance: dataAccess) |
|
|
|
|
if let dataAccess = dataAccessCollection.first(where: { $0.modelId == modelId }) { |
|
|
|
|
return dataAccess.sharedWith |
|
|
|
|
} |
|
|
|
|
return [] |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public func removeUserAccess<T: SyncedStorable>(_ user: String, data: T) { |
|
|
|
|
public func setAuthorizedUsers<T: SyncedStorable>(for instance: T, users: [String]) throws { |
|
|
|
|
guard let dataAccessCollection = self._dataAccess else { |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
if let dataAccess = dataAccessCollection.first(where: { $0.modelId == data.stringId }) { |
|
|
|
|
dataAccess.sharedWith.removeAll(where: { $0 == user }) |
|
|
|
|
|
|
|
|
|
if dataAccess.sharedWith.isEmpty { |
|
|
|
|
guard let userId = self.userId else { |
|
|
|
|
throw LeStorageError.cantCreateDataAccessBecauseUserIdIsNil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if let dataAccess = dataAccessCollection.first(where: { $0.modelId == instance.stringId }) { |
|
|
|
|
if users.isEmpty { |
|
|
|
|
dataAccessCollection.delete(instance: dataAccess) |
|
|
|
|
} else { |
|
|
|
|
dataAccessCollection.addOrUpdate(instance: dataAccess) |
|
|
|
|
dataAccess.sharedWith.removeAll() |
|
|
|
|
dataAccess.sharedWith = users |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
let dataAccess = DataAccess(owner: userId, sharedWith: users, modelName: String(describing: type(of: instance)), modelId: instance.stringId) |
|
|
|
|
dataAccessCollection.addOrUpdate(instance: dataAccess) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|