From 2478c6b608c787c9a8eb5b3d23a0dd3c3df3e780 Mon Sep 17 00:00:00 2001 From: Alexey Bezhan Date: Fri, 29 Mar 2019 16:44:57 +0000 Subject: [PATCH] Add a temporary check for service folder permission Since we're calling `User.has_template_folder_permission` directly in a few places (notably the `folder_path` template macro), we need to check that the service has the feature flag enabled first. This is usually done by the caller, but template macro doesn't have access to `current_service`. To avoid passing it in each time the macro is called we're adding a temporary check inside the method itself. This commit can be reverted completely when we remove the service feature flag. --- app/models/service.py | 6 +++--- app/models/user.py | 10 +++++++++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/app/models/service.py b/app/models/service.py index 2787eb209..64805f430 100644 --- a/app/models/service.py +++ b/app/models/service.py @@ -443,10 +443,10 @@ class Service(): user_folders = [] for folder in self.all_template_folders: - if not user.has_template_folder_permission(folder): + if not user.has_template_folder_permission(folder, service=self): continue parent = self.get_template_folder(folder["parent_id"]) - if user.has_template_folder_permission(parent): + if user.has_template_folder_permission(parent, service=self): user_folders.append(folder) else: folder_attrs = { @@ -460,7 +460,7 @@ class Service(): else: parent = self.get_template_folder(parent["parent_id"]) folder_attrs["parent_id"] = parent.get("id", None) - if user.has_template_folder_permission(parent): + if user.has_template_folder_permission(parent, service=self): break user_folders.append(folder_attrs) return user_folders diff --git a/app/models/user.py b/app/models/user.py index 3c234eb3e..bf5d4feaa 100644 --- a/app/models/user.py +++ b/app/models/user.py @@ -151,7 +151,15 @@ class User(UserMixin): def has_permission_for_service(self, service_id, permission): return permission in self._permissions.get(service_id, []) - def has_template_folder_permission(self, template_folder): + def has_template_folder_permission(self, template_folder, service=None): + from app import current_service + + if service is None: + service = current_service + + if not service.has_permission('edit_folder_permissions'): + return True + if self.platform_admin: return True