Skip to content

Commit

Permalink
Fix for issue 1423
Browse files Browse the repository at this point in the history
* no longer rely on global variables for invalidating caches
  • Loading branch information
kux committed Sep 19, 2012
1 parent 35f76b0 commit 4fec4d9
Showing 1 changed file with 19 additions and 11 deletions.
30 changes: 19 additions & 11 deletions cms/cache/permissions.py
Expand Up @@ -2,40 +2,48 @@
from django.conf import settings from django.conf import settings
from django.core.cache import cache from django.core.cache import cache


permission_cache_keys = [] from django.contrib.auth.models import User
all_keys = []
PERMISSION_KEYS = [
'can_change', 'can_add', 'can_delete',
'can_change_advanced_settings', 'can_publish',
'can_change_permissions', 'can_move_page',
'can_moderate', 'can_view']



def get_cache_key(user, key): def get_cache_key(user, key):
return "%s:permission:%s:%s" % ( return "%s:permission:%s:%s" % (
settings.CMS_CACHE_PREFIX, user.username, key) settings.CMS_CACHE_PREFIX, user.username, key)



def get_permission_cache(user, key): def get_permission_cache(user, key):
""" """
Helper for reading values from cache Helper for reading values from cache
""" """
return cache.get(get_cache_key(user, key)) return cache.get(get_cache_key(user, key))



def set_permission_cache(user, key, value): def set_permission_cache(user, key, value):
""" """
Helper method for storing values in cache. Stores used keys so Helper method for storing values in cache. Stores used keys so
all of them can be cleaned when clean_permission_cache gets called. all of them can be cleaned when clean_permission_cache gets called.
""" """
# store this key, so we can clean it when required # store this key, so we can clean it when required
cache_key = get_cache_key(user, key) cache_key = get_cache_key(user, key)

if not cache_key in all_keys:
all_keys.append(cache_key)
if not key in permission_cache_keys:
permission_cache_keys.append(key)
cache.set(cache_key, value, settings.CMS_CACHE_DURATIONS['permissions']) cache.set(cache_key, value, settings.CMS_CACHE_DURATIONS['permissions'])



def clear_user_permission_cache(user): def clear_user_permission_cache(user):
""" """
Cleans permission cache for given user. Cleans permission cache for given user.
""" """
for key in permission_cache_keys: for key in PERMISSION_KEYS:
cache.delete(get_cache_key(user, key)) cache.delete(get_cache_key(user, key))



def clear_permission_cache(): def clear_permission_cache():
for key in all_keys: users = User.objects.filter(is_active=True)
cache.delete(key) for user in users:
for key in PERMISSION_KEYS:
cache_key = get_cache_key(user, key)
cache.delete(cache_key)

0 comments on commit 4fec4d9

Please sign in to comment.