|
279
|
1 |
from django.core.cache import cache |
|
282
|
2 |
from django.conf import settings |
|
279
|
3 |
from guardian.core import ObjectPermissionChecker |
|
282
|
4 |
from django.contrib.auth.models import User |
|
|
5 |
from django.db.models import Q |
|
279
|
6 |
from guardian.shortcuts import assign |
|
|
7 |
|
|
282
|
8 |
def get_cached_checker(user): |
|
279
|
9 |
key_name = 'checker_%s' % user.username |
|
|
10 |
|
|
|
11 |
checker = cache.get(key_name) |
|
|
12 |
if checker: |
|
|
13 |
return checker |
|
|
14 |
|
|
|
15 |
checker = ObjectPermissionChecker(user) |
|
|
16 |
cache.set(key_name, checker, 30) |
|
|
17 |
return checker |
|
|
18 |
|
|
|
19 |
|
|
282
|
20 |
def cached_assign(perm, user_or_group, object): |
|
279
|
21 |
assign(perm, user_or_group, object) |
|
|
22 |
|
|
282
|
23 |
if hasattr(user_or_group, 'username'): |
|
279
|
24 |
key = 'checker_%s' % user_or_group.username |
|
|
25 |
else: |
|
|
26 |
key = 'checker_%s' % user_or_group.name |
|
|
27 |
|
|
282
|
28 |
cache.delete('checker_%s' % key) |
|
|
29 |
|
|
|
30 |
|
|
|
31 |
def get_cached_userlist(): |
|
|
32 |
userlist = cache.get('userlist') |
|
|
33 |
if userlist: |
|
|
34 |
return userlist |
|
|
35 |
|
|
|
36 |
query = Q(id=settings.ANONYMOUS_USER_ID) | Q(is_superuser=True) |
|
|
37 |
userlist = User.objects.exclude(query) |
|
|
38 |
cache.set('userlist', userlist) |
|
|
39 |
return userlist |