public bool ResolveRecordAccessPath(IRecordAccessPath path, bool forEdit = false) { if (string.IsNullOrEmpty(path.RecordUid)) { return(false); } if (metaData.TryGetValue(path.RecordUid, out SyncDownRecordMetaData sdrm)) { if (sdrm.canEdit || !forEdit) { return(true); } } else { return(false); } foreach (var sharedFolder in sharedFolders.Values) { if (sharedFolder.records != null) { var sfr = sharedFolder.records .FirstOrDefault(x => (x.recordUid == path.RecordUid) && (x.canEdit || !forEdit)); if (sfr != null) { if (string.IsNullOrEmpty(sharedFolder.sharedFolderKey)) { if (sharedFolder.teams != null) { foreach (var team in sharedFolder.teams) { if (teams.TryGetValue(team.teamUid, out SyncDownTeam sdt)) { if (forEdit && sdt.restrictEdit) { continue; } path.SharedFolderUid = sharedFolder.sharedFolderUid; path.TeamUid = sdt.teamUid; return(true); } } } } else { path.SharedFolderUid = sharedFolder.sharedFolderUid; return(true); } } } } return(false); }
public static IRecordMetadata ResolveRecordAccessPath(this IVault vault, IRecordAccessPath path, bool forEdit = false, bool forShare = false, bool forView = false) { if (string.IsNullOrEmpty(path.RecordUid)) { return(null); } foreach (var rmd in vault.Storage.RecordKeys.GetLinksForSubject(path.RecordUid)) { if (forEdit && !rmd.CanEdit) { continue; } if (forShare && !rmd.CanShare) { continue; } if (string.IsNullOrEmpty(rmd.SharedFolderUid) || rmd.SharedFolderUid == vault.Storage.PersonalScopeUid) { return(rmd); } foreach (var sfmd in vault.Storage.SharedFolderKeys.GetLinksForSubject(rmd.SharedFolderUid)) { if (string.IsNullOrEmpty(sfmd.TeamUid)) { path.SharedFolderUid = sfmd.SharedFolderUid; return(rmd); } if (!forEdit && !forShare && !forView) { path.SharedFolderUid = sfmd.SharedFolderUid; path.TeamUid = sfmd.TeamUid; return(rmd); } if (!vault.TryGetTeam(sfmd.TeamUid, out var team)) { continue; } if (forEdit && team.RestrictEdit) { continue; } if (forShare && team.RestrictShare) { continue; } if (forView && team.RestrictView) { continue; } path.SharedFolderUid = sfmd.SharedFolderUid; path.TeamUid = sfmd.TeamUid; return(rmd); } } return(null); }