summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorVincent Petry <pvince81@owncloud.com>2014-09-05 12:20:48 +0200
committerVincent Petry <pvince81@owncloud.com>2014-09-05 12:20:48 +0200
commit5913a694de0e98e918d9d08340ac88c9f1eab937 (patch)
tree8b34600e2e271c3ab2fd44989977ab82dcaf8566 /apps
parent614cf996ca74d26263f3ffeb43e7a9b81eadfae6 (diff)
parentf1bfe35cda2f11d1b38726cf2d4f879427b2c8d5 (diff)
downloadnextcloud-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.js19
-rw-r--r--apps/files/js/files.js7
-rw-r--r--apps/files/tests/js/filelistSpec.js11
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;