Files: fix get share

This commit is contained in:
pavelbannov 2020-11-19 21:48:16 +03:00
parent 1ddb6804ed
commit 5aef0e809e
4 changed files with 47 additions and 19 deletions

View File

@ -308,7 +308,9 @@ namespace ASC.Web.Files.Services.WCFService
|| parent.FolderType == FolderType.SHARE
|| parent.RootFolderType == FolderType.Privacy;
entries = entries.Where(x => x.FileEntryType == FileEntryType.Folder || !FileConverter.IsConverting((File<T>)x));
entries = entries.Where(x => x.FileEntryType == FileEntryType.Folder ||
(x is File<string> f1 && !FileConverter.IsConverting(f1) ||
x is File<int> f2 && !FileConverter.IsConverting(f2)));
var result = new DataWrapper<T>
{

View File

@ -694,17 +694,26 @@ namespace ASC.Files.Core.Security
return daoFactory.GetSecurityDao<T>().GetShares(entry);
}
public List<FileEntry<T>> GetSharesForMe<T>(FilterType filterType, bool subjectGroup, Guid subjectID, string searchText = "", bool searchInContent = false, bool withSubfolders = false)
public List<FileEntry> GetSharesForMe(FilterType filterType, bool subjectGroup, Guid subjectID, string searchText = "", bool searchInContent = false, bool withSubfolders = false)
{
var securityDao = daoFactory.GetSecurityDao<int>();
var subjects = GetUserSubjects(AuthContext.CurrentAccount.ID);
var records = securityDao.GetShares(subjects);
var result = new List<FileEntry>();
result.AddRange(GetSharesForMe<int>(records.Where(r=> r.EntryId.GetType() == typeof(int)), subjects, filterType, subjectGroup, subjectID, searchText, searchInContent, withSubfolders));
result.AddRange(GetSharesForMe<string>(records.Where(r => r.EntryId.GetType() == typeof(string)), subjects, filterType, subjectGroup, subjectID, searchText, searchInContent, withSubfolders));
return result;
}
private List<FileEntry> GetSharesForMe<T>(IEnumerable<FileShareRecord> records, List<Guid> subjects, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText = "", bool searchInContent = false, bool withSubfolders = false)
{
var folderDao = daoFactory.GetFolderDao<T>();
var fileDao = daoFactory.GetFileDao<T>();
var securityDao = daoFactory.GetSecurityDao<T>();
var subjects = GetUserSubjects(AuthContext.CurrentAccount.ID);
var records = securityDao.GetShares(subjects);
var fileIds = new Dictionary<object, FileShare>();
var folderIds = new Dictionary<object, FileShare>();
var fileIds = new Dictionary<T, FileShare>();
var folderIds = new Dictionary<T, FileShare>();
var recordGroup = records.GroupBy(r => new { r.EntryId, r.EntryType }, (key, group) => new
{
@ -717,13 +726,13 @@ namespace ASC.Files.Core.Security
{
if (r.firstRecord.EntryType == FileEntryType.Folder)
{
if (!folderIds.ContainsKey(r.firstRecord.EntryId))
folderIds.Add(r.firstRecord.EntryId, r.firstRecord.Share);
if (!folderIds.ContainsKey((T)r.firstRecord.EntryId))
folderIds.Add((T)r.firstRecord.EntryId, r.firstRecord.Share);
}
else
{
if (!fileIds.ContainsKey(r.firstRecord.EntryId))
fileIds.Add(r.firstRecord.EntryId, r.firstRecord.Share);
if (!fileIds.ContainsKey((T)r.firstRecord.EntryId))
fileIds.Add((T)r.firstRecord.EntryId, r.firstRecord.Share);
}
}
@ -731,7 +740,7 @@ namespace ASC.Files.Core.Security
if (filterType != FilterType.FoldersOnly)
{
var files = fileDao.GetFilesFiltered(fileIds.Keys.Select(r => (T)r).ToArray(), filterType, subjectGroup, subjectID, searchText, searchInContent);
var files = fileDao.GetFilesFiltered(fileIds.Keys.Select(r => r).ToArray(), filterType, subjectGroup, subjectID, searchText, searchInContent);
files.ForEach(x =>
{
@ -747,7 +756,7 @@ namespace ASC.Files.Core.Security
if (filterType == FilterType.None || filterType == FilterType.FoldersOnly)
{
var folders = folderDao.GetFolders(folderIds.Keys.Select(r => (T)r).ToArray(), filterType, subjectGroup, subjectID, searchText, withSubfolders, false);
var folders = folderDao.GetFolders(folderIds.Keys.Select(r => r).ToArray(), filterType, subjectGroup, subjectID, searchText, withSubfolders, false);
if (withSubfolders)
{
@ -767,7 +776,7 @@ namespace ASC.Files.Core.Security
if (filterType != FilterType.FoldersOnly && withSubfolders)
{
var filesInSharedFolders = fileDao.GetFiles(folderIds.Keys.Select(r => (T)r).ToArray(), filterType, subjectGroup, subjectID, searchText, searchInContent);
var filesInSharedFolders = fileDao.GetFiles(folderIds.Keys.Select(r => r).ToArray(), filterType, subjectGroup, subjectID, searchText, searchInContent);
filesInSharedFolders = FilterRead(filesInSharedFolders).ToList();
entries.AddRange(filesInSharedFolders);
entries = entries.Distinct().ToList();
@ -802,7 +811,7 @@ namespace ASC.Files.Core.Security
securityDao.DeleteShareRecords(failedRecords);
}
return entries.Where(x => string.IsNullOrEmpty(x.Error)).ToList();
return entries.Where(x => string.IsNullOrEmpty(x.Error)).Cast<FileEntry>().ToList();
}
public List<FileEntry<T>> GetPrivacyForMe<T>(FilterType filterType, bool subjectGroup, Guid subjectID, string searchText = "", bool searchInContent = false, bool withSubfolders = false)

View File

@ -42,7 +42,7 @@ namespace ASC.Api.Documents
{
/// <summary>
/// </summary>
public List<FileWrapper<T>> Files { get; set; }
public List<FileEntryWrapper> Files { get; set; }
/// <summary>
/// </summary>
@ -87,7 +87,7 @@ namespace ASC.Api.Documents
return new FolderContentWrapper<int>
{
Current = FolderWrapper<int>.GetSample(),
Files = new List<FileWrapper<int>>(new[] { FileWrapper<int>.GetSample(), FileWrapper<int>.GetSample() }),
Files = new List<FileEntryWrapper>(new[] { FileWrapper<int>.GetSample(), FileWrapper<int>.GetSample() }),
Folders = new List<FileEntryWrapper>(new[] { FolderWrapper<int>.GetSample(), FolderWrapper<int>.GetSample() }),
PathParts = new
{
@ -120,7 +120,24 @@ namespace ASC.Api.Documents
{
var result = new FolderContentWrapper<T>
{
Files = folderItems.Entries.OfType<File<T>>().Select(FileWrapperHelper.Get).ToList(),
Files = folderItems.Entries
.Where(r => r.FileEntryType == FileEntryType.File)
.Select(r =>
{
FileEntryWrapper wrapper = null;
if (r is File<int> fol1)
{
wrapper = FileWrapperHelper.Get(fol1);
}
if (r is File<string> fol2)
{
wrapper = FileWrapperHelper.Get(fol2);
}
return wrapper;
}
)
.ToList(),
Folders = folderItems.Entries
.Where(r => r.FileEntryType == FileEntryType.Folder)
.Select(r =>

View File

@ -372,7 +372,7 @@ namespace ASC.Web.Files.Utils
else if (parent.FolderType == FolderType.SHARE)
{
//share
var shared = (IEnumerable<FileEntry<T>>)fileSecurity.GetSharesForMe<T>(filter, subjectGroup, subjectId, searchText, searchInContent, withSubfolders);
var shared = fileSecurity.GetSharesForMe(filter, subjectGroup, subjectId, searchText, searchInContent, withSubfolders);
entries = entries.Concat(shared);