|
1 try: |
|
2 set |
|
3 except NameError: |
|
4 from sets import Set as set # Python 2.3 fallback |
|
5 |
1 from django.db import connection |
6 from django.db import connection |
2 from django.contrib.auth.models import User |
7 from django.contrib.auth.models import User |
3 |
8 |
4 try: |
9 |
5 set |
|
6 except NameError: |
|
7 from sets import Set as set # Python 2.3 fallback |
|
8 |
|
9 class ModelBackend(object): |
10 class ModelBackend(object): |
10 """ |
11 """ |
11 Authenticate against django.contrib.auth.models.User |
12 Authenticates against django.contrib.auth.models.User. |
12 """ |
13 """ |
13 # TODO: Model, login attribute name and password attribute name should be |
14 # TODO: Model, login attribute name and password attribute name should be |
14 # configurable. |
15 # configurable. |
15 def authenticate(self, username=None, password=None): |
16 def authenticate(self, username=None, password=None): |
16 try: |
17 try: |
19 return user |
20 return user |
20 except User.DoesNotExist: |
21 except User.DoesNotExist: |
21 return None |
22 return None |
22 |
23 |
23 def get_group_permissions(self, user_obj): |
24 def get_group_permissions(self, user_obj): |
24 "Returns a list of permission strings that this user has through his/her groups." |
25 """ |
|
26 Returns a set of permission strings that this user has through his/her |
|
27 groups. |
|
28 """ |
25 if not hasattr(user_obj, '_group_perm_cache'): |
29 if not hasattr(user_obj, '_group_perm_cache'): |
26 cursor = connection.cursor() |
30 cursor = connection.cursor() |
27 # The SQL below works out to the following, after DB quoting: |
31 # The SQL below works out to the following, after DB quoting: |
28 # cursor.execute(""" |
32 # cursor.execute(""" |
29 # SELECT ct."app_label", p."codename" |
33 # SELECT ct."app_label", p."codename" |
48 qn('id'), qn('content_type_id'), |
52 qn('id'), qn('content_type_id'), |
49 qn('user_id'),) |
53 qn('user_id'),) |
50 cursor.execute(sql, [user_obj.id]) |
54 cursor.execute(sql, [user_obj.id]) |
51 user_obj._group_perm_cache = set(["%s.%s" % (row[0], row[1]) for row in cursor.fetchall()]) |
55 user_obj._group_perm_cache = set(["%s.%s" % (row[0], row[1]) for row in cursor.fetchall()]) |
52 return user_obj._group_perm_cache |
56 return user_obj._group_perm_cache |
53 |
57 |
54 def get_all_permissions(self, user_obj): |
58 def get_all_permissions(self, user_obj): |
55 if not hasattr(user_obj, '_perm_cache'): |
59 if not hasattr(user_obj, '_perm_cache'): |
56 user_obj._perm_cache = set([u"%s.%s" % (p.content_type.app_label, p.codename) for p in user_obj.user_permissions.select_related()]) |
60 user_obj._perm_cache = set([u"%s.%s" % (p.content_type.app_label, p.codename) for p in user_obj.user_permissions.select_related()]) |
57 user_obj._perm_cache.update(self.get_group_permissions(user_obj)) |
61 user_obj._perm_cache.update(self.get_group_permissions(user_obj)) |
58 return user_obj._perm_cache |
62 return user_obj._perm_cache |
59 |
63 |
60 def has_perm(self, user_obj, perm): |
64 def has_perm(self, user_obj, perm): |
61 return perm in self.get_all_permissions(user_obj) |
65 return perm in self.get_all_permissions(user_obj) |
62 |
66 |
63 def has_module_perms(self, user_obj, app_label): |
67 def has_module_perms(self, user_obj, app_label): |
64 return bool(len([p for p in self.get_all_permissions(user_obj) if p[:p.index('.')] == app_label])) |
68 """ |
|
69 Returns True if user_obj has any permissions in the given app_label. |
|
70 """ |
|
71 for perm in self.get_all_permissions(user_obj): |
|
72 if perm[:perm.index('.')] == app_label: |
|
73 return True |
|
74 return False |
65 |
75 |
66 def get_user(self, user_id): |
76 def get_user(self, user_id): |
67 try: |
77 try: |
68 return User.objects.get(pk=user_id) |
78 return User.objects.get(pk=user_id) |
69 except User.DoesNotExist: |
79 except User.DoesNotExist: |