Skip to content

Commit 6a6689c

Browse files
fsbraunfdintino
authored andcommitted
fix: respect upload and directory listing permissions (#1352)
* fix: respect `can_use_directory_listing`, `change_folder`, `add_folder`, `add_file` permissions * Update tests * fix flake8 error * Close files in tests * Add test for has_... permissions of File and Folder class * Remove unused variables from tests * Remove unnecessary noqa
1 parent 5440e47 commit 6a6689c

File tree

8 files changed

+264
-155
lines changed

8 files changed

+264
-155
lines changed

filer/admin/clipboardadmin.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
from django.contrib import admin
1+
from django.contrib import admin, messages
22
from django.forms.models import modelform_factory
33
from django.http import JsonResponse
44
from django.urls import path
5+
from django.utils.translation import gettext_lazy as _
56
from django.views.decorators.csrf import csrf_exempt
67

78
from .. import settings as filer_settings
@@ -11,8 +12,9 @@
1112
from . import views
1213

1314

14-
NO_FOLDER_ERROR = "Can't find folder to upload. Please refresh and try again"
15-
NO_PERMISSIONS_FOR_FOLDER = (
15+
NO_PERMISSIONS = _("You do not have permission to upload files.")
16+
NO_FOLDER_ERROR = _("Can't find folder to upload. Please refresh and try again")
17+
NO_PERMISSIONS_FOR_FOLDER = _(
1618
"Can't use this folder, Permission Denied. Please select another folder."
1719
)
1820

@@ -68,17 +70,24 @@ def ajax_upload(request, folder_id=None):
6870
"""
6971
Receives an upload from the uploader. Receives only one file at a time.
7072
"""
73+
74+
if not request.user.has_perm("filer.add_file"):
75+
messages.error(request, NO_PERMISSIONS)
76+
return JsonResponse({'error': NO_PERMISSIONS})
77+
7178
if folder_id:
7279
try:
7380
# Get folder
7481
folder = Folder.objects.get(pk=folder_id)
7582
except Folder.DoesNotExist:
83+
messages.error(request, NO_FOLDER_ERROR)
7684
return JsonResponse({'error': NO_FOLDER_ERROR})
7785
else:
7886
folder = Folder.objects.filter(pk=request.session.get('filer_last_folder_id', 0)).first()
7987

8088
# check permissions
8189
if folder and not folder.has_add_children_permission(request):
90+
messages.error(request, NO_PERMISSIONS_FOR_FOLDER)
8291
return JsonResponse({'error': NO_PERMISSIONS_FOR_FOLDER})
8392

8493
if len(request.FILES) == 1:

filer/admin/folderadmin.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,8 @@ def get_urls(self):
233233

234234
# custom views
235235
def directory_listing(self, request, folder_id=None, viewtype=None):
236+
if not request.user.has_perm("filer.can_use_directory_listing"):
237+
raise PermissionDenied()
236238
clipboard = tools.get_user_clipboard(request.user)
237239
if viewtype == 'images_with_missing_data':
238240
folder = ImagesWithMissingData()

filer/models/filemodels.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -300,13 +300,13 @@ def __lt__(self, other):
300300
return self.label.lower() < other.label.lower()
301301

302302
def has_edit_permission(self, request):
303-
return self.has_generic_permission(request, 'edit')
303+
return request.user.has_perm("filer.change_file") and self.has_generic_permission(request, 'edit')
304304

305305
def has_read_permission(self, request):
306306
return self.has_generic_permission(request, 'read')
307307

308308
def has_add_children_permission(self, request):
309-
return self.has_generic_permission(request, 'add_children')
309+
return request.user.has_perm("filer.add_file") and self.has_generic_permission(request, 'add_children')
310310

311311
def has_generic_permission(self, request, permission_type):
312312
"""

filer/models/foldermodels.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -200,13 +200,13 @@ def quoted_logical_path(self):
200200
return urlquote(self.pretty_logical_path)
201201

202202
def has_edit_permission(self, request):
203-
return self.has_generic_permission(request, 'edit')
203+
return request.user.has_perm("filer.change_folder") and self.has_generic_permission(request, 'edit')
204204

205205
def has_read_permission(self, request):
206206
return self.has_generic_permission(request, 'read')
207207

208208
def has_add_children_permission(self, request):
209-
return self.has_generic_permission(request, 'add_children')
209+
return request.user.has_perm("filer.change_folder") and self.has_generic_permission(request, 'add_children')
210210

211211
def has_generic_permission(self, request, permission_type):
212212
"""

0 commit comments

Comments
 (0)