From 33929576fc616991384084da6888afb7c7c2316c Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Fri, 31 May 2019 00:22:52 -0400 Subject: [PATCH] Allow passing a manager Add a manager argument to check_access to avoid using the the default manager blindly. Used for models with more than one manager like the Document model. Signed-off-by: Roberto Rosario --- mayan/apps/acls/managers.py | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/mayan/apps/acls/managers.py b/mayan/apps/acls/managers.py index 739cf1ce0b..2bc9f457ff 100644 --- a/mayan/apps/acls/managers.py +++ b/mayan/apps/acls/managers.py @@ -200,19 +200,26 @@ class AccessControlListManager(models.Manager): return result - def check_access(self, obj, permissions, user): - meta = getattr(obj, '_meta', None) + def check_access(self, obj, permissions, user, manager=None): + # Allow specific managers for models that have more than one + # for example the Document model when checking for access for a trashed + # document. - if not meta: - logger.debug( - ugettext( - 'Object "%s" is not a model and cannot be checked for ' - 'access.' - ) % force_text(obj) - ) - return True + if manager: + source_queryset = manager.all() else: - source_queryset = obj._meta.default_manager.all() + meta = getattr(obj, '_meta', None) + + if not meta: + logger.debug( + ugettext( + 'Object "%s" is not a model and cannot be checked for ' + 'access.' + ) % force_text(obj) + ) + return True + else: + source_queryset = obj._meta.default_manager.all() restricted_queryset = obj._meta.default_manager.none() for permission in permissions: