Merge branch 'develop' into feature/fix-hide/show-header

This commit is contained in:
TatianaLopaeva 2020-12-03 15:12:31 +03:00
commit 8c3a6298f3
8 changed files with 90 additions and 57 deletions

View File

@ -110,7 +110,7 @@ namespace ASC.Web.Files.Core.Entries
if (!FileSecurity.CanEdit(file)) throw new System.Security.SecurityException(FilesCommonResource.ErrorMassage_SecurityException_EditFile);
if (file.RootFolderType != FolderType.Privacy) throw new NotSupportedException();
var fileShares = FileStorageService.GetSharedInfo(new ItemList<string> { string.Format("file_{0}", fileId) }).ToList();
var fileShares = FileStorageService.GetSharedInfo(new List<T> { fileId }, new List<T> { }).ToList();
fileShares = fileShares.Where(share => !share.SubjectGroup
&& !share.SubjectId.Equals(FileConstant.ShareLinkId)
&& share.Share == FileShare.ReadWrite).ToList();

View File

@ -26,7 +26,6 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
@ -1745,37 +1744,40 @@ namespace ASC.Web.Files.Services.WCFService
#endregion
public ItemList<AceWrapper> GetSharedInfo(ItemList<string> objectIds)
public ItemList<AceWrapper> GetSharedInfo(IEnumerable<T> fileIds, IEnumerable<T> folderIds)
{
return FileSharing.GetSharedInfo<T>(objectIds);
return FileSharing.GetSharedInfo(fileIds, folderIds);
}
public ItemList<AceShortWrapper> GetSharedInfoShort(string objectId)
public ItemList<AceShortWrapper> GetSharedInfoShortFile(T fileId)
{
return FileSharing.GetSharedInfoShort<T>(objectId);
return FileSharing.GetSharedInfoShortFile(fileId);
}
public ItemList<string> SetAceObject(AceCollection aceCollection, bool notify)
public ItemList<AceShortWrapper> GetSharedInfoShortFolder(T folderId)
{
return FileSharing.GetSharedInfoShortFolder(folderId);
}
public List<T> SetAceObject(AceCollection<T> aceCollection, bool notify)
{
var fileDao = GetFileDao();
var folderDao = GetFolderDao();
var result = new ItemList<string>();
foreach (var objectId in aceCollection.Entries)
{
Debug.Assert(objectId != null, "objectId != null");
var entryType = objectId.StartsWith("file_") ? FileEntryType.File : FileEntryType.Folder;
var entryId = (T)Convert.ChangeType(objectId.Substring((entryType == FileEntryType.File ? "file_" : "folder_").Length), typeof(T));
var entry = entryType == FileEntryType.File
? fileDao.GetFile(entryId)
: (FileEntry<T>)folderDao.GetFolder(entryId);
var result = new List<T>();
var entries = new List<FileEntry<T>>();
entries.AddRange(aceCollection.Files.Select(fileId => fileDao.GetFile(fileId)));
entries.AddRange(aceCollection.Folders.Select(folderDao.GetFolder));
foreach (var entry in entries)
{
try
{
var changed = FileSharingAceHelper.SetAceObject(aceCollection.Aces, entry, notify, aceCollection.Message);
if (changed)
{
FilesMessageService.Send(entry, GetHttpHeaders(),
entryType == FileEntryType.Folder ? MessageAction.FolderUpdatedAccess : MessageAction.FileUpdatedAccess,
entry.FileEntryType == FileEntryType.Folder ? MessageAction.FolderUpdatedAccess : MessageAction.FileUpdatedAccess,
entry.Title);
}
}
@ -1785,9 +1787,9 @@ namespace ASC.Web.Files.Services.WCFService
}
var securityDao = GetSecurityDao();
if (securityDao.IsShared(entry.ID, entryType))
if (securityDao.IsShared(entry.ID, entry.FileEntryType))
{
result.Add(objectId);
result.Add(entry.ID);
}
}
return result;
@ -1987,7 +1989,7 @@ namespace ASC.Web.Files.Services.WCFService
NotifyClient.SendEditorMentions(file, fileLink, recipients, message);
return showSharingSettings ? GetSharedInfoShort("file_" + fileId) : null;
return showSharingSettings ? GetSharedInfoShortFile(fileId) : null;
}
public ItemList<EncryptionKeyPair> GetEncryptionAccess(T fileId)

View File

@ -266,7 +266,7 @@ namespace ASC.Web.Files.Services.DocumentService
try
{
return FileSharing.GetSharedInfoShort<string>(File.UniqID);
return FileSharing.GetSharedInfoShortFile(File.ID);
}
catch
{

View File

@ -172,7 +172,7 @@ namespace ASC.Web.Files.Services.WCFService
ItemList<AceShortWrapper> GetSharedInfoShort(string objectId);
ItemList<string> SetAceObject(AceCollection aceCollection, bool notify);
List<T> SetAceObject(AceCollection<T> aceCollection, bool notify);
void RemoveAce(ItemList<string> items);

View File

@ -25,6 +25,7 @@
using System;
using System.Collections.Generic;
using System.Text.Json.Serialization;
using ASC.Files.Core;
@ -33,9 +34,10 @@ using ASC.Files.Core.Security;
namespace ASC.Web.Files.Services.WCFService
{
public class AceCollection
public class AceCollection<T>
{
public ItemList<string> Entries { get; set; }
public IEnumerable<T> Files { get; set; }
public IEnumerable<T> Folders { get; set; }
public ItemList<AceWrapper> Aces { get; set; }

View File

@ -424,7 +424,7 @@ namespace ASC.Web.Files.Utils
return result;
}
public ItemList<AceWrapper> GetSharedInfo<T>(ItemList<string> objectIds)
public ItemList<AceWrapper> GetSharedInfo<T>(IEnumerable<T> fileIds, IEnumerable<T> folderIds)
{
if (!AuthContext.IsAuthenticated)
{
@ -433,23 +433,16 @@ namespace ASC.Web.Files.Utils
var result = new List<AceWrapper>();
var folderDao = DaoFactory.GetFolderDao<T>();
var fileDao = DaoFactory.GetFileDao<T>();
var fileDao = DaoFactory.GetFileDao<T>();
var files = fileDao.GetFiles(fileIds);
var folderDao = DaoFactory.GetFolderDao<T>();
var folders = folderDao.GetFolders(folderIds);
var entries = files.Cast<FileEntry<T>>().Concat(folders.Cast<FileEntry<T>>());
foreach (var objectId in objectIds)
foreach (var entry in entries)
{
if (string.IsNullOrEmpty(objectId))
{
throw new InvalidOperationException(FilesCommonResource.ErrorMassage_BadRequest);
}
var entryType = objectId.StartsWith("file_") ? FileEntryType.File : FileEntryType.Folder;
var entryId = (T)Convert.ChangeType(objectId.Substring((entryType == FileEntryType.File ? "file_" : "folder_").Length), typeof(T));
var entry = entryType == FileEntryType.File
? fileDao.GetFile(entryId)
: (FileEntry<T>)folderDao.GetFolder(entryId);
IEnumerable<AceWrapper> acesForObject;
try
{
@ -516,7 +509,7 @@ namespace ASC.Web.Files.Utils
result.Remove(meAce);
AceWrapper linkAce = null;
if (objectIds.Count > 1)
if (entries.Any())
{
result.RemoveAll(ace => ace.SubjectId == FileConstant.ShareLinkId);
}
@ -544,13 +537,25 @@ namespace ASC.Web.Files.Utils
return new ItemList<AceWrapper>(result);
}
public ItemList<AceShortWrapper> GetSharedInfoShort<T>(string objectId)
public ItemList<AceShortWrapper> GetSharedInfoShortFile<T>(T fileID)
{
var aces = GetSharedInfo<T>(new ItemList<string> { objectId });
var aces = GetSharedInfo(new List<T> { fileID}, new List<T>());
return GetAceShortWrappers(aces);
}
return new ItemList<AceShortWrapper>(
aces.Where(aceWrapper => !aceWrapper.SubjectId.Equals(FileConstant.ShareLinkId) || aceWrapper.Share != FileShare.Restrict)
.Select(aceWrapper => new AceShortWrapper(aceWrapper)));
public ItemList<AceShortWrapper> GetSharedInfoShortFolder<T>(T folderId)
{
var aces = GetSharedInfo(new List<T>(), new List<T> { folderId });
return GetAceShortWrappers(aces);
}
private ItemList<AceShortWrapper> GetAceShortWrappers(ItemList<AceWrapper> aces)
{
return new ItemList<AceShortWrapper>(aces
.Where(aceWrapper => !aceWrapper.SubjectId.Equals(FileConstant.ShareLinkId) || aceWrapper.Share != FileShare.Restrict)
.Select(aceWrapper => new AceShortWrapper(aceWrapper)));
}
}
}

View File

@ -1604,6 +1604,25 @@ namespace ASC.Api.Documents
return FilesControllerHelperInt.GetFolderSecurityInfo(folderId);
}
[Read("share")]
public IEnumerable<FileShareWrapper> GetSecurityInfoFromBody([FromBody] BaseBatchModel<JsonElement> model)
{
var result = new List<FileShareWrapper>();
result.AddRange(FilesControllerHelperInt.GetSecurityInfo(model.FileIds.Where(r => r.ValueKind == JsonValueKind.Number).Select(r => r.GetInt32()), model.FolderIds.Where(r => r.ValueKind == JsonValueKind.Number).Select(r => r.GetInt32())));
result.AddRange(FilesControllerHelperString.GetSecurityInfo(model.FileIds.Where(r => r.ValueKind == JsonValueKind.String).Select(r => r.GetString()), model.FolderIds.Where(r => r.ValueKind == JsonValueKind.String).Select(r => r.GetString())));
return result;
}
[Read("share")]
[Consumes("application/x-www-form-urlencoded")]
public IEnumerable<FileShareWrapper> GetSecurityInfoFromForm([FromForm] BaseBatchModel<JsonElement> model)
{
var result = new List<FileShareWrapper>();
result.AddRange(FilesControllerHelperInt.GetSecurityInfo(model.FileIds.Where(r => r.ValueKind == JsonValueKind.Number).Select(r => r.GetInt32()), model.FolderIds.Where(r => r.ValueKind == JsonValueKind.Number).Select(r => r.GetInt32())));
result.AddRange(FilesControllerHelperString.GetSecurityInfo(model.FileIds.Where(r => r.ValueKind == JsonValueKind.String).Select(r => r.GetString()), model.FolderIds.Where(r => r.ValueKind == JsonValueKind.String).Select(r => r.GetString())));
return result;
}
/// <summary>
/// Sets sharing settings for the file with the ID specified in the request
/// </summary>

View File

@ -468,13 +468,19 @@ namespace ASC.Files.Helpers
public IEnumerable<FileShareWrapper> GetFileSecurityInfo(T fileId)
{
var fileShares = FileStorageService.GetSharedInfo(new ItemList<string> { string.Format("file_{0}", fileId) });
var fileShares = FileStorageService.GetSharedInfo(new List<T> { fileId }, new List<T> { });
return fileShares.Select(FileShareWrapperHelper.Get);
}
public IEnumerable<FileShareWrapper> GetFolderSecurityInfo(T folderId)
{
var fileShares = FileStorageService.GetSharedInfo(new ItemList<string> { string.Format("folder_{0}", folderId) });
var fileShares = FileStorageService.GetSharedInfo(new List<T> { }, new List<T> { folderId });
return fileShares.Select(FileShareWrapperHelper.Get);
}
public IEnumerable<FileShareWrapper> GetSecurityInfo(IEnumerable<T> fileIds, IEnumerable<T> folderIds)
{
var fileShares = FileStorageService.GetSharedInfo(fileIds, folderIds);
return fileShares.Select(FileShareWrapperHelper.Get);
}
@ -483,9 +489,9 @@ namespace ASC.Files.Helpers
if (share != null && share.Any())
{
var list = new ItemList<AceWrapper>(share.Select(FileShareParamsHelper.ToAceObject));
var aceCollection = new AceCollection
var aceCollection = new AceCollection<T>
{
Entries = new ItemList<string> { "file_" + fileId },
Files = new List<T> {fileId },
Aces = list,
Message = sharingMessage
};
@ -499,9 +505,9 @@ namespace ASC.Files.Helpers
if (share != null && share.Any())
{
var list = new ItemList<AceWrapper>(share.Select(FileShareParamsHelper.ToAceObject));
var aceCollection = new AceCollection
var aceCollection = new AceCollection<T>
{
Entries = new ItemList<string> { "folder_" + folderId },
Folders = new List<T> { folderId },
Aces = list,
Message = sharingMessage
};
@ -522,8 +528,7 @@ namespace ASC.Files.Helpers
{
var file = GetFileInfo(fileId);
var objectId = "file_" + file.Id;
var sharedInfo = FileStorageService.GetSharedInfo(new ItemList<string> { objectId }).Find(r => r.SubjectId == FileConstant.ShareLinkId);
var sharedInfo = FileStorageService.GetSharedInfo(new List<T> { fileId }, new List<T> { }).Find(r => r.SubjectId == FileConstant.ShareLinkId);
if (sharedInfo == null || sharedInfo.Share != share)
{
var list = new ItemList<AceWrapper>
@ -535,13 +540,13 @@ namespace ASC.Files.Helpers
Share = share
}
};
var aceCollection = new AceCollection
var aceCollection = new AceCollection<T>
{
Entries = new ItemList<string> { objectId },
Files = new List<T> { fileId },
Aces = list
};
FileStorageService.SetAceObject(aceCollection, false);
sharedInfo = FileStorageService.GetSharedInfo(new ItemList<string> { objectId }).Find(r => r.SubjectId == FileConstant.ShareLinkId);
sharedInfo = FileStorageService.GetSharedInfo(new List<T> { fileId }, new List<T> { }).Find(r => r.SubjectId == FileConstant.ShareLinkId);
}
return sharedInfo.Link;