src/ldt/ldt/security/cache.py
author verrierj
Tue, 13 Dec 2011 15:46:34 +0100
changeset 282 7512c33b64be
parent 279 b50206f6238f
child 285 1cc364d7b298
permissions -rw-r--r--
Add cache to userlist
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
279
b50206f6238f Add cache form ObjectPermissionChecker objects
verrierj
parents:
diff changeset
     1
from django.core.cache import cache
282
7512c33b64be Add cache to userlist
verrierj
parents: 279
diff changeset
     2
from django.conf import settings
279
b50206f6238f Add cache form ObjectPermissionChecker objects
verrierj
parents:
diff changeset
     3
from guardian.core import ObjectPermissionChecker
282
7512c33b64be Add cache to userlist
verrierj
parents: 279
diff changeset
     4
from django.contrib.auth.models import User
7512c33b64be Add cache to userlist
verrierj
parents: 279
diff changeset
     5
from django.db.models import Q
279
b50206f6238f Add cache form ObjectPermissionChecker objects
verrierj
parents:
diff changeset
     6
from guardian.shortcuts import assign
b50206f6238f Add cache form ObjectPermissionChecker objects
verrierj
parents:
diff changeset
     7
282
7512c33b64be Add cache to userlist
verrierj
parents: 279
diff changeset
     8
def get_cached_checker(user):
279
b50206f6238f Add cache form ObjectPermissionChecker objects
verrierj
parents:
diff changeset
     9
    key_name = 'checker_%s' % user.username
b50206f6238f Add cache form ObjectPermissionChecker objects
verrierj
parents:
diff changeset
    10
    
b50206f6238f Add cache form ObjectPermissionChecker objects
verrierj
parents:
diff changeset
    11
    checker = cache.get(key_name)
b50206f6238f Add cache form ObjectPermissionChecker objects
verrierj
parents:
diff changeset
    12
    if checker:
b50206f6238f Add cache form ObjectPermissionChecker objects
verrierj
parents:
diff changeset
    13
        return checker
b50206f6238f Add cache form ObjectPermissionChecker objects
verrierj
parents:
diff changeset
    14
    
b50206f6238f Add cache form ObjectPermissionChecker objects
verrierj
parents:
diff changeset
    15
    checker = ObjectPermissionChecker(user)
b50206f6238f Add cache form ObjectPermissionChecker objects
verrierj
parents:
diff changeset
    16
    cache.set(key_name, checker, 30)
b50206f6238f Add cache form ObjectPermissionChecker objects
verrierj
parents:
diff changeset
    17
    return checker
b50206f6238f Add cache form ObjectPermissionChecker objects
verrierj
parents:
diff changeset
    18
b50206f6238f Add cache form ObjectPermissionChecker objects
verrierj
parents:
diff changeset
    19
282
7512c33b64be Add cache to userlist
verrierj
parents: 279
diff changeset
    20
def cached_assign(perm, user_or_group, object):
279
b50206f6238f Add cache form ObjectPermissionChecker objects
verrierj
parents:
diff changeset
    21
    assign(perm, user_or_group, object)
b50206f6238f Add cache form ObjectPermissionChecker objects
verrierj
parents:
diff changeset
    22
    
282
7512c33b64be Add cache to userlist
verrierj
parents: 279
diff changeset
    23
    if hasattr(user_or_group, 'username'):
279
b50206f6238f Add cache form ObjectPermissionChecker objects
verrierj
parents:
diff changeset
    24
        key = 'checker_%s' % user_or_group.username
b50206f6238f Add cache form ObjectPermissionChecker objects
verrierj
parents:
diff changeset
    25
    else:
b50206f6238f Add cache form ObjectPermissionChecker objects
verrierj
parents:
diff changeset
    26
        key = 'checker_%s' % user_or_group.name
b50206f6238f Add cache form ObjectPermissionChecker objects
verrierj
parents:
diff changeset
    27
        
282
7512c33b64be Add cache to userlist
verrierj
parents: 279
diff changeset
    28
    cache.delete('checker_%s' % key)
7512c33b64be Add cache to userlist
verrierj
parents: 279
diff changeset
    29
    
7512c33b64be Add cache to userlist
verrierj
parents: 279
diff changeset
    30
    
7512c33b64be Add cache to userlist
verrierj
parents: 279
diff changeset
    31
def get_cached_userlist():
7512c33b64be Add cache to userlist
verrierj
parents: 279
diff changeset
    32
    userlist = cache.get('userlist')
7512c33b64be Add cache to userlist
verrierj
parents: 279
diff changeset
    33
    if userlist:
7512c33b64be Add cache to userlist
verrierj
parents: 279
diff changeset
    34
        return userlist
7512c33b64be Add cache to userlist
verrierj
parents: 279
diff changeset
    35
    
7512c33b64be Add cache to userlist
verrierj
parents: 279
diff changeset
    36
    query = Q(id=settings.ANONYMOUS_USER_ID) | Q(is_superuser=True)
7512c33b64be Add cache to userlist
verrierj
parents: 279
diff changeset
    37
    userlist = User.objects.exclude(query)
7512c33b64be Add cache to userlist
verrierj
parents: 279
diff changeset
    38
    cache.set('userlist', userlist)
7512c33b64be Add cache to userlist
verrierj
parents: 279
diff changeset
    39
    return userlist