From 0643970751d46b73a7d1c48a6ef6593e7d43c8bc Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Tue, 8 Dec 2015 02:26:03 +0100 Subject: Use cache for faster rights checking --- ishtar_common/backend.py | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) (limited to 'ishtar_common/backend.py') diff --git a/ishtar_common/backend.py b/ishtar_common/backend.py index 7ebdab221..0febd61b2 100644 --- a/ishtar_common/backend.py +++ b/ishtar_common/backend.py @@ -21,22 +21,18 @@ Permission backend to manage "own" objects """ -from django.conf import settings -from django.contrib.auth.models import User +from django.contrib.auth.backends import ModelBackend from django.core.exceptions import ObjectDoesNotExist from django.db.models.loading import cache import models -class ObjectPermBackend(object): + +class ObjectPermBackend(ModelBackend): supports_object_permissions = True supports_anonymous_user = True - def authenticate(self, username, password): - # managed by the default backend - return None - - def has_perm(self, user_obj, perm, model=None, obj=None): + def has_perm(self, user_obj, perm, model=None, obj=None, session=None): if not user_obj.is_authenticated(): return False if not model: @@ -50,10 +46,10 @@ class ObjectPermBackend(object): is_ownperm = perm.split('.')[-1].split('_')[1] == 'own' except IndexError: is_ownperm = False - if ishtar_user.has_right('administrator'): + if ishtar_user.has_right('administrator', session=session): return True - main_right = ishtar_user.person.has_right(perm) \ - or user_obj.has_perm(perm) + main_right = ishtar_user.person.has_right(perm, session=session) \ + or user_obj.has_perm(perm) if not main_right or not is_ownperm: return main_right if obj is None: -- cgit v1.2.3