Files: copyTo, copyFrom rights
This commit is contained in:
parent
580c6688a3
commit
6cf303a1d4
@ -85,6 +85,40 @@ public abstract class FileEntryDto<T> : FileEntryDto
|
||||
[Scope]
|
||||
public class FileEntryDtoHelper
|
||||
{
|
||||
private static readonly IDictionary<FileEntryType, IEnumerable<FilesSecurityActions>> SecurityEntries =
|
||||
new Dictionary<FileEntryType, IEnumerable<FilesSecurityActions>>()
|
||||
{
|
||||
{
|
||||
FileEntryType.File, new List<FilesSecurityActions>()
|
||||
{
|
||||
FilesSecurityActions.Read,
|
||||
FilesSecurityActions.Comment,
|
||||
FilesSecurityActions.FillForms,
|
||||
FilesSecurityActions.Review,
|
||||
FilesSecurityActions.Edit,
|
||||
FilesSecurityActions.Delete,
|
||||
FilesSecurityActions.CustomFilter,
|
||||
FilesSecurityActions.Rename,
|
||||
FilesSecurityActions.ReadHistory,
|
||||
FilesSecurityActions.Lock,
|
||||
FilesSecurityActions.ChangeHistory,
|
||||
}
|
||||
},
|
||||
{
|
||||
FileEntryType.Folder, new List<FilesSecurityActions>()
|
||||
{
|
||||
FilesSecurityActions.Read,
|
||||
FilesSecurityActions.Create,
|
||||
FilesSecurityActions.Edit,
|
||||
FilesSecurityActions.Delete,
|
||||
FilesSecurityActions.RoomEdit,
|
||||
FilesSecurityActions.Rename,
|
||||
FilesSecurityActions.CopyTo,
|
||||
FilesSecurityActions.CopyFrom
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private readonly ApiDateTimeHelper _apiDateTimeHelper;
|
||||
private readonly EmployeeDtoHelper _employeeWraperHelper;
|
||||
private readonly FileSharingHelper _fileSharingHelper;
|
||||
@ -127,7 +161,7 @@ public class FileEntryDtoHelper
|
||||
ProviderId = entry.ProviderId.NullIfDefault(),
|
||||
CanShare = await _fileSharingHelper.CanSetAccessAsync(entry),
|
||||
CanEdit = await _fileSecurity.CanEditAsync(entry),
|
||||
Security = entry.Security
|
||||
Security = entry.Security.Where(r => SecurityEntries[entry.FileEntryType].Contains(r.Key)).ToDictionary(r => r.Key, r => r.Value)
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -101,7 +101,7 @@ public class FileSecurity : IFileSecurity
|
||||
|
||||
public Task<bool> CanReadHistoryAsync<T>(FileEntry<T> entry)
|
||||
{
|
||||
return CanAsync(entry, _authContext.CurrentAccount.ID, FilesSecurityActions.ReadHistory);
|
||||
return CanReadHistoryAsync(entry, _authContext.CurrentAccount.ID);
|
||||
}
|
||||
|
||||
public Task<bool> CanReadHistoryAsync<T>(FileEntry<T> entry, Guid userId)
|
||||
@ -248,6 +248,16 @@ public class FileSecurity : IFileSecurity
|
||||
return CanAsync(entry, userId, FilesSecurityActions.Lock);
|
||||
}
|
||||
|
||||
public Task<bool> CanCopyToAsync<T>(FileEntry<T> entry)
|
||||
{
|
||||
return CanAsync(entry, _authContext.CurrentAccount.ID, FilesSecurityActions.CopyTo);
|
||||
}
|
||||
|
||||
public Task<bool> CanCopyFromAsync<T>(FileEntry<T> entry)
|
||||
{
|
||||
return CanAsync(entry, _authContext.CurrentAccount.ID, FilesSecurityActions.CopyFrom);
|
||||
}
|
||||
|
||||
public Task<IEnumerable<Guid>> WhoCanReadAsync<T>(FileEntry<T> entry)
|
||||
{
|
||||
return WhoCanAsync(entry, FilesSecurityActions.Read);
|
||||
@ -724,20 +734,24 @@ public class FileSecurity : IFileSecurity
|
||||
|
||||
if ((e.RootFolderType == FolderType.VirtualRooms || e.RootFolderType == FolderType.Archive) && !isUser)
|
||||
{
|
||||
if (e.RootFolderType == FolderType.Archive &&
|
||||
if (e.RootFolderType == FolderType.Archive)
|
||||
{
|
||||
if (
|
||||
action != FilesSecurityActions.Read &&
|
||||
action != FilesSecurityActions.Delete &&
|
||||
action != FilesSecurityActions.RoomEdit &&
|
||||
action != FilesSecurityActions.ReadHistory
|
||||
action != FilesSecurityActions.ReadHistory &&
|
||||
action != FilesSecurityActions.CopyFrom
|
||||
)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (action == FilesSecurityActions.Delete && e.RootFolderType == FolderType.Archive && isDocSpaceAdmin)
|
||||
if (action == FilesSecurityActions.Delete && isDocSpaceAdmin)
|
||||
{
|
||||
return folder != null && DocSpaceHelper.IsRoom(folder.FolderType);
|
||||
}
|
||||
}
|
||||
|
||||
if (isDocSpaceAdmin || e.CreateBy == userId)
|
||||
{
|
||||
@ -1596,6 +1610,8 @@ public class FileSecurity : IFileSecurity
|
||||
Rename,
|
||||
ReadHistory,
|
||||
Lock,
|
||||
ChangeHistory
|
||||
ChangeHistory,
|
||||
CopyTo,
|
||||
CopyFrom
|
||||
}
|
||||
}
|
||||
|
@ -113,6 +113,7 @@ class FileMoveCopyOperation<T> : FileOperation<FileMoveCopyOperationData<T>, T>
|
||||
{
|
||||
var fileMarker = scope.ServiceProvider.GetService<FileMarker>();
|
||||
var folderDao = scope.ServiceProvider.GetService<IFolderDao<TTo>>();
|
||||
var fileSecurity = scope.ServiceProvider.GetService<FileSecurity>();
|
||||
|
||||
this[Res] += string.Format("folder_{0}{1}", _daoFolderId, SplitChar);
|
||||
|
||||
@ -152,28 +153,8 @@ class FileMoveCopyOperation<T> : FileOperation<FileMoveCopyOperationData<T>, T>
|
||||
rootFrom = await FolderDao.GetRootFolderByFileAsync(Files[0]);
|
||||
}
|
||||
|
||||
if (rootFrom != null)
|
||||
{
|
||||
if (rootFrom.FolderType == FolderType.TRASH)
|
||||
{
|
||||
throw new InvalidOperationException("Can not copy from Trash.");
|
||||
}
|
||||
|
||||
if (rootFrom.FolderType == FolderType.Archive)
|
||||
{
|
||||
throw new InvalidOperationException("Can not copy from Archive.");
|
||||
}
|
||||
}
|
||||
|
||||
if (toFolder.RootFolderType == FolderType.TRASH)
|
||||
{
|
||||
throw new InvalidOperationException("Can not copy to Trash.");
|
||||
}
|
||||
|
||||
if (toFolder.RootFolderType == FolderType.Archive)
|
||||
{
|
||||
throw new InvalidOperationException("Can not copy to Archive");
|
||||
}
|
||||
await fileSecurity.CanCopyFromAsync(rootFrom);
|
||||
await fileSecurity.CanCopyToAsync(toFolder);
|
||||
}
|
||||
|
||||
var needToMark = new List<FileEntry<TTo>>();
|
||||
|
Loading…
Reference in New Issue
Block a user