Speed up response time when retrieving group projects
authorverrierj
Fri, 16 Dec 2011 14:47:18 +0100
changeset 289 f78273a17bb3
parent 288 de787ddbca54
child 290 e1980a7d4b83
Speed up response time when retrieving group projects
src/ldt/ldt/ldt_utils/views.py
src/ldt/ldt/security/utils.py
--- a/src/ldt/ldt/ldt_utils/views.py	Fri Dec 16 11:04:02 2011 +0100
+++ b/src/ldt/ldt/ldt_utils/views.py	Fri Dec 16 14:47:18 2011 +0100
@@ -172,7 +172,7 @@
     else:
         project_list = Project.safe_objects.filter(query)
         show_username = False
-    
+
     project_list = add_change_attr(request.user, project_list)
     
     if status == 2:
--- a/src/ldt/ldt/security/utils.py	Fri Dec 16 11:04:02 2011 +0100
+++ b/src/ldt/ldt/security/utils.py	Fri Dec 16 14:47:18 2011 +0100
@@ -1,7 +1,7 @@
 from django.conf import settings
 from django.contrib.contenttypes.models import ContentType
-from guardian.shortcuts import assign, remove_perm, get_users_with_perms, get_groups_with_perms
-from cache import get_cached_checker, get_cached_userlist
+from guardian.shortcuts import assign, remove_perm, get_users_with_perms, get_groups_with_perms, get_objects_for_user
+from cache import get_cached_userlist
 
 try:
     from threading import local
@@ -89,6 +89,7 @@
     
     return xml
 
+
 def add_change_attr(user, obj_list):
     """ 
      Add a change attribute set to True to objects of obj_list
@@ -100,16 +101,15 @@
     model_name = obj_list[0].__class__.__name__.lower()
     ctype = ContentType.objects.get(model=model_name)
     cls = ctype.model_class()
-    
+
     if model_name in [cls_name.lower() for cls_name in settings.USE_GROUP_PERMISSIONS]:
-        checker = get_cached_checker(user)
+        to_check = True
+        change_list = get_objects_for_user(user, '%s.change_%s' % (cls._meta.app_label, model_name))
     else:
-        checker = None
-        
-    perm_name = "%s.change_%s" % (cls._meta.app_label, model_name)
+        to_check = False        
         
     for obj in obj_list:
-        if not checker or checker.has_perm(perm_name, obj):
+        if not to_check or obj in change_list:
             obj.change = True
         else:
             obj.change = False