Merge branch 'develop' into feature/fix-hide/show-header
This commit is contained in:
commit
8c3a6298f3
@ -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();
|
||||
|
@ -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)
|
||||
|
@ -266,7 +266,7 @@ namespace ASC.Web.Files.Services.DocumentService
|
||||
|
||||
try
|
||||
{
|
||||
return FileSharing.GetSharedInfoShort<string>(File.UniqID);
|
||||
return FileSharing.GetSharedInfoShortFile(File.ID);
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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; }
|
||||
|
||||
|
@ -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)));
|
||||
}
|
||||
}
|
||||
}
|
@ -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>
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user