app/django/contrib/auth/backends.py
changeset 323 ff1a9aa48cfd
parent 54 03e267d67478
equal deleted inserted replaced
322:6641e941ef1e 323:ff1a9aa48cfd
       
     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: