Added permission check for drag and drop
When dropping files onto a read-only folder, a notification is now shown instead of attempting to upload. This for both the drag for upload and drag from inside the file list cases.
This commit is contained in:
parent
1a7df33233
commit
f1bfe35cda
|
@ -1631,6 +1631,18 @@
|
||||||
return name;
|
return name;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shows a "permission denied" notification
|
||||||
|
*/
|
||||||
|
_showPermissionDeniedNotification: function() {
|
||||||
|
var message = t('core', 'You don’t have permission to upload or create files here');
|
||||||
|
OC.Notification.show(message);
|
||||||
|
//hide notification after 10 sec
|
||||||
|
setTimeout(function() {
|
||||||
|
OC.Notification.hide();
|
||||||
|
}, 5000);
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Setup file upload events related to the file-upload plugin
|
* Setup file upload events related to the file-upload plugin
|
||||||
*/
|
*/
|
||||||
|
@ -1662,6 +1674,12 @@
|
||||||
// remember as context
|
// remember as context
|
||||||
data.context = dropTarget;
|
data.context = dropTarget;
|
||||||
|
|
||||||
|
// if permissions are specified, only allow if create permission is there
|
||||||
|
var permissions = dropTarget.data('permissions');
|
||||||
|
if (!_.isUndefined(permissions) && (permissions & OC.PERMISSION_CREATE) === 0) {
|
||||||
|
self._showPermissionDeniedNotification();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
var dir = dropTarget.data('file');
|
var dir = dropTarget.data('file');
|
||||||
// if from file list, need to prepend parent dir
|
// if from file list, need to prepend parent dir
|
||||||
if (dir) {
|
if (dir) {
|
||||||
|
@ -1686,6 +1704,7 @@
|
||||||
// cancel uploads to current dir if no permission
|
// cancel uploads to current dir if no permission
|
||||||
var isCreatable = (self.getDirectoryPermissions() & OC.PERMISSION_CREATE) !== 0;
|
var isCreatable = (self.getDirectoryPermissions() & OC.PERMISSION_CREATE) !== 0;
|
||||||
if (!isCreatable) {
|
if (!isCreatable) {
|
||||||
|
self._showPermissionDeniedNotification();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -433,7 +433,12 @@ var folderDropOptions = {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var targetPath = FileList.getCurrentDirectory() + '/' + $(this).closest('tr').data('file');
|
var $tr = $(this).closest('tr');
|
||||||
|
if (($tr.data('permissions') & OC.PERMISSION_CREATE) === 0) {
|
||||||
|
FileList._showPermissionDeniedNotification();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
var targetPath = FileList.getCurrentDirectory() + '/' + $tr.data('file');
|
||||||
|
|
||||||
var files = FileList.getSelectedFiles();
|
var files = FileList.getSelectedFiles();
|
||||||
if (files.length === 0) {
|
if (files.length === 0) {
|
||||||
|
|
|
@ -1835,7 +1835,6 @@ describe('OCA.Files.FileList tests', function() {
|
||||||
// but it makes it possible to simulate the event triggering to
|
// but it makes it possible to simulate the event triggering to
|
||||||
// test the response of the handlers
|
// test the response of the handlers
|
||||||
$uploader = $('#file_upload_start');
|
$uploader = $('#file_upload_start');
|
||||||
fileList.setupUploadEvents();
|
|
||||||
fileList.setFiles(testFiles);
|
fileList.setFiles(testFiles);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1912,6 +1911,16 @@ describe('OCA.Files.FileList tests', function() {
|
||||||
ev = dropOn(fileList.$fileList.find('th:first'));
|
ev = dropOn(fileList.$fileList.find('th:first'));
|
||||||
|
|
||||||
expect(ev.result).toEqual(false);
|
expect(ev.result).toEqual(false);
|
||||||
|
expect(notificationStub.calledOnce).toEqual(true);
|
||||||
|
});
|
||||||
|
it('drop on an folder does not trigger upload if no upload permission on that folder', function() {
|
||||||
|
var $tr = fileList.findFileEl('somedir');
|
||||||
|
var ev;
|
||||||
|
$tr.data('permissions', OC.PERMISSION_READ);
|
||||||
|
ev = dropOn($tr);
|
||||||
|
|
||||||
|
expect(ev.result).toEqual(false);
|
||||||
|
expect(notificationStub.calledOnce).toEqual(true);
|
||||||
});
|
});
|
||||||
it('drop on a file row inside the table triggers upload to current folder', function() {
|
it('drop on a file row inside the table triggers upload to current folder', function() {
|
||||||
var ev;
|
var ev;
|
||||||
|
|
Loading…
Reference in New Issue