diff options
author | Vincent Petry <pvince81@owncloud.com> | 2014-09-05 12:20:48 +0200 |
---|---|---|
committer | Vincent Petry <pvince81@owncloud.com> | 2014-09-05 12:20:48 +0200 |
commit | 5913a694de0e98e918d9d08340ac88c9f1eab937 (patch) | |
tree | 8b34600e2e271c3ab2fd44989977ab82dcaf8566 /apps | |
parent | 614cf996ca74d26263f3ffeb43e7a9b81eadfae6 (diff) | |
parent | f1bfe35cda2f11d1b38726cf2d4f879427b2c8d5 (diff) | |
download | nextcloud-server-5913a694de0e98e918d9d08340ac88c9f1eab937.tar.gz nextcloud-server-5913a694de0e98e918d9d08340ac88c9f1eab937.zip |
Merge pull request #10870 from owncloud/dnd-droponreadonlyfolderfix
Added permission check for drag and drop
Diffstat (limited to 'apps')
-rw-r--r-- | apps/files/js/filelist.js | 19 | ||||
-rw-r--r-- | apps/files/js/files.js | 7 | ||||
-rw-r--r-- | apps/files/tests/js/filelistSpec.js | 11 |
3 files changed, 35 insertions, 2 deletions
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index 037e04db21c..4a9c56e6bf5 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -1632,6 +1632,18 @@ }, /** + * 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 */ setupUploadEvents: function() { @@ -1662,6 +1674,12 @@ // remember as context 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'); // if from file list, need to prepend parent dir if (dir) { @@ -1686,6 +1704,7 @@ // cancel uploads to current dir if no permission var isCreatable = (self.getDirectoryPermissions() & OC.PERMISSION_CREATE) !== 0; if (!isCreatable) { + self._showPermissionDeniedNotification(); return false; } } diff --git a/apps/files/js/files.js b/apps/files/js/files.js index df0c40a4405..5fcf99d24af 100644 --- a/apps/files/js/files.js +++ b/apps/files/js/files.js @@ -433,7 +433,12 @@ var folderDropOptions = { 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(); if (files.length === 0) { diff --git a/apps/files/tests/js/filelistSpec.js b/apps/files/tests/js/filelistSpec.js index cad564323b4..65a89ef85cd 100644 --- a/apps/files/tests/js/filelistSpec.js +++ b/apps/files/tests/js/filelistSpec.js @@ -1835,7 +1835,6 @@ describe('OCA.Files.FileList tests', function() { // but it makes it possible to simulate the event triggering to // test the response of the handlers $uploader = $('#file_upload_start'); - fileList.setupUploadEvents(); fileList.setFiles(testFiles); }); @@ -1912,6 +1911,16 @@ describe('OCA.Files.FileList tests', function() { ev = dropOn(fileList.$fileList.find('th:first')); 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() { var ev; |