Index: django/db/models/manager.py
===================================================================
--- django/db/models/manager.py	(revision 6193)
+++ django/db/models/manager.py	(working copy)
@@ -111,3 +111,7 @@
         if instance != None:
             raise AttributeError, "Manager isn't accessible via %s instances" % type.__name__
         return self.manager
+
+class EmptyManager(Manager):
+    def get_query_set(self):
+        return self.get_empty_query_set()
Index: django/contrib/auth/tests.py
===================================================================
--- django/contrib/auth/tests.py	(revision 6193)
+++ django/contrib/auth/tests.py	(working copy)
@@ -1,5 +1,5 @@
 """
->>> from models import User
+>>> from models import User, AnonymousUser
 >>> u = User.objects.create_user('testuser', 'test@example.com', 'testpw')
 >>> u.has_usable_password()
 True
@@ -16,4 +16,11 @@
 >>> u2 = User.objects.create_user('testuser2', 'test2@example.com')
 >>> u2.has_usable_password()
 False
+>>> a = AnonymousUser()
+>>> a.is_staff
+False
+>>> a.groups.all()
+[]
+>>> a.user_permissions.all()
+[]
 """
\ No newline at end of file
Index: django/contrib/auth/models.py
===================================================================
--- django/contrib/auth/models.py	(revision 6193)
+++ django/contrib/auth/models.py	(working copy)
@@ -1,6 +1,7 @@
 from django.core import validators
 from django.core.exceptions import ImproperlyConfigured
 from django.db import connection, models
+from django.db.models.manager import EmptyManager
 from django.contrib.contenttypes.models import ContentType
 from django.utils.encoding import smart_str
 from django.utils.translation import ugettext_lazy as _
@@ -293,6 +294,11 @@
 class AnonymousUser(object):
     id = None
     username = ''
+    is_staff = False
+    is_active = True
+    is_superuser = False
+    _groups = EmptyManager()
+    _user_permissions = EmptyManager()
 
     def __init__(self):
         pass
@@ -325,11 +331,11 @@
         raise NotImplementedError
 
     def _get_groups(self):
-        raise NotImplementedError
+        return self._groups
     groups = property(_get_groups)
 
     def _get_user_permissions(self):
-        raise NotImplementedError
+        return self._user_permissions
     user_permissions = property(_get_user_permissions)
 
     def has_perm(self, perm):
Index: docs/authentication.txt
===================================================================
--- docs/authentication.txt	(revision 6193)
+++ docs/authentication.txt	(working copy)
@@ -244,6 +244,9 @@
 the ``django.contrib.auth.models.User`` interface, with these differences:
 
     * ``id`` is always ``None``.
+    * ``is_staff`` and ``is_superuser`` are always False
+    * ``is_active`` is always True
+    * ``groups`` and ``user_permissions`` are always empty
     * ``is_anonymous()`` returns ``True`` instead of ``False``.
     * ``is_authenticated()`` returns ``False`` instead of ``True``.
     * ``has_perm()`` always returns ``False``.
