PageRenderTime 24ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/examples/itemisApp.gae/src/django/contrib/auth/tests/auth_backends.py

https://github.com/aruder77/applause
Python | 253 lines | 203 code | 41 blank | 9 comment | 15 complexity | 3367a7661a7ba97c382069baed2d7095 MD5 | raw file
  1. import warnings
  2. from django.conf import settings
  3. from django.contrib.auth.models import User, Group, Permission, AnonymousUser
  4. from django.contrib.contenttypes.models import ContentType
  5. from django.test import TestCase
  6. class BackendTest(TestCase):
  7. backend = 'django.contrib.auth.backends.ModelBackend'
  8. def setUp(self):
  9. self.curr_auth = settings.AUTHENTICATION_BACKENDS
  10. settings.AUTHENTICATION_BACKENDS = (self.backend,)
  11. User.objects.create_user('test', 'test@example.com', 'test')
  12. def tearDown(self):
  13. settings.AUTHENTICATION_BACKENDS = self.curr_auth
  14. def test_has_perm(self):
  15. user = User.objects.get(username='test')
  16. self.assertEqual(user.has_perm('auth.test'), False)
  17. user.is_staff = True
  18. user.save()
  19. self.assertEqual(user.has_perm('auth.test'), False)
  20. user.is_superuser = True
  21. user.save()
  22. self.assertEqual(user.has_perm('auth.test'), True)
  23. user.is_staff = False
  24. user.is_superuser = False
  25. user.save()
  26. self.assertEqual(user.has_perm('auth.test'), False)
  27. user.is_staff = True
  28. user.is_superuser = True
  29. user.is_active = False
  30. user.save()
  31. self.assertEqual(user.has_perm('auth.test'), False)
  32. def test_custom_perms(self):
  33. user = User.objects.get(username='test')
  34. content_type=ContentType.objects.get_for_model(Group)
  35. perm = Permission.objects.create(name='test', content_type=content_type, codename='test')
  36. user.user_permissions.add(perm)
  37. user.save()
  38. # reloading user to purge the _perm_cache
  39. user = User.objects.get(username='test')
  40. self.assertEqual(user.get_all_permissions() == set([u'auth.test']), True)
  41. self.assertEqual(user.get_group_permissions(), set([]))
  42. self.assertEqual(user.has_module_perms('Group'), False)
  43. self.assertEqual(user.has_module_perms('auth'), True)
  44. perm = Permission.objects.create(name='test2', content_type=content_type, codename='test2')
  45. user.user_permissions.add(perm)
  46. user.save()
  47. perm = Permission.objects.create(name='test3', content_type=content_type, codename='test3')
  48. user.user_permissions.add(perm)
  49. user.save()
  50. user = User.objects.get(username='test')
  51. self.assertEqual(user.get_all_permissions(), set([u'auth.test2', u'auth.test', u'auth.test3']))
  52. self.assertEqual(user.has_perm('test'), False)
  53. self.assertEqual(user.has_perm('auth.test'), True)
  54. self.assertEqual(user.has_perms(['auth.test2', 'auth.test3']), True)
  55. perm = Permission.objects.create(name='test_group', content_type=content_type, codename='test_group')
  56. group = Group.objects.create(name='test_group')
  57. group.permissions.add(perm)
  58. group.save()
  59. user.groups.add(group)
  60. user = User.objects.get(username='test')
  61. exp = set([u'auth.test2', u'auth.test', u'auth.test3', u'auth.test_group'])
  62. self.assertEqual(user.get_all_permissions(), exp)
  63. self.assertEqual(user.get_group_permissions(), set([u'auth.test_group']))
  64. self.assertEqual(user.has_perms(['auth.test3', 'auth.test_group']), True)
  65. user = AnonymousUser()
  66. self.assertEqual(user.has_perm('test'), False)
  67. self.assertEqual(user.has_perms(['auth.test2', 'auth.test3']), False)
  68. def test_has_no_object_perm(self):
  69. """Regressiontest for #12462"""
  70. user = User.objects.get(username='test')
  71. content_type=ContentType.objects.get_for_model(Group)
  72. perm = Permission.objects.create(name='test', content_type=content_type, codename='test')
  73. user.user_permissions.add(perm)
  74. user.save()
  75. self.assertEqual(user.has_perm('auth.test', 'object'), False)
  76. self.assertEqual(user.get_all_permissions('object'), set([]))
  77. self.assertEqual(user.has_perm('auth.test'), True)
  78. self.assertEqual(user.get_all_permissions(), set(['auth.test']))
  79. class TestObj(object):
  80. pass
  81. class SimpleRowlevelBackend(object):
  82. supports_object_permissions = True
  83. # This class also supports tests for anonymous user permissions,
  84. # via subclasses which just set the 'supports_anonymous_user' attribute.
  85. def has_perm(self, user, perm, obj=None):
  86. if not obj:
  87. return # We only support row level perms
  88. if isinstance(obj, TestObj):
  89. if user.username == 'test2':
  90. return True
  91. elif user.is_anonymous() and perm == 'anon':
  92. # not reached due to supports_anonymous_user = False
  93. return True
  94. return False
  95. def has_module_perms(self, user, app_label):
  96. return app_label == "app1"
  97. def get_all_permissions(self, user, obj=None):
  98. if not obj:
  99. return [] # We only support row level perms
  100. if not isinstance(obj, TestObj):
  101. return ['none']
  102. if user.is_anonymous():
  103. return ['anon']
  104. if user.username == 'test2':
  105. return ['simple', 'advanced']
  106. else:
  107. return ['simple']
  108. def get_group_permissions(self, user, obj=None):
  109. if not obj:
  110. return # We only support row level perms
  111. if not isinstance(obj, TestObj):
  112. return ['none']
  113. if 'test_group' in [group.name for group in user.groups.all()]:
  114. return ['group_perm']
  115. else:
  116. return ['none']
  117. class RowlevelBackendTest(TestCase):
  118. """
  119. Tests for auth backend that supports object level permissions
  120. """
  121. backend = 'django.contrib.auth.tests.auth_backends.SimpleRowlevelBackend'
  122. def setUp(self):
  123. self.curr_auth = settings.AUTHENTICATION_BACKENDS
  124. settings.AUTHENTICATION_BACKENDS = tuple(self.curr_auth) + (self.backend,)
  125. self.user1 = User.objects.create_user('test', 'test@example.com', 'test')
  126. self.user2 = User.objects.create_user('test2', 'test2@example.com', 'test')
  127. self.user3 = User.objects.create_user('test3', 'test3@example.com', 'test')
  128. warnings.filterwarnings('ignore', category=DeprecationWarning,
  129. module='django.contrib.auth')
  130. def tearDown(self):
  131. settings.AUTHENTICATION_BACKENDS = self.curr_auth
  132. warnings.resetwarnings()
  133. warnings.simplefilter('ignore', PendingDeprecationWarning)
  134. def test_has_perm(self):
  135. self.assertEqual(self.user1.has_perm('perm', TestObj()), False)
  136. self.assertEqual(self.user2.has_perm('perm', TestObj()), True)
  137. self.assertEqual(self.user2.has_perm('perm'), False)
  138. self.assertEqual(self.user2.has_perms(['simple', 'advanced'], TestObj()), True)
  139. self.assertEqual(self.user3.has_perm('perm', TestObj()), False)
  140. self.assertEqual(self.user3.has_perm('anon', TestObj()), False)
  141. self.assertEqual(self.user3.has_perms(['simple', 'advanced'], TestObj()), False)
  142. def test_get_all_permissions(self):
  143. self.assertEqual(self.user1.get_all_permissions(TestObj()), set(['simple']))
  144. self.assertEqual(self.user2.get_all_permissions(TestObj()), set(['simple', 'advanced']))
  145. self.assertEqual(self.user2.get_all_permissions(), set([]))
  146. def test_get_group_permissions(self):
  147. content_type=ContentType.objects.get_for_model(Group)
  148. group = Group.objects.create(name='test_group')
  149. self.user3.groups.add(group)
  150. self.assertEqual(self.user3.get_group_permissions(TestObj()), set(['group_perm']))
  151. class AnonymousUserBackend(SimpleRowlevelBackend):
  152. supports_anonymous_user = True
  153. class NoAnonymousUserBackend(SimpleRowlevelBackend):
  154. supports_anonymous_user = False
  155. class AnonymousUserBackendTest(TestCase):
  156. """
  157. Tests for AnonymousUser delegating to backend if it has 'supports_anonymous_user' = True
  158. """
  159. backend = 'django.contrib.auth.tests.auth_backends.AnonymousUserBackend'
  160. def setUp(self):
  161. self.curr_auth = settings.AUTHENTICATION_BACKENDS
  162. settings.AUTHENTICATION_BACKENDS = (self.backend,)
  163. self.user1 = AnonymousUser()
  164. def tearDown(self):
  165. settings.AUTHENTICATION_BACKENDS = self.curr_auth
  166. def test_has_perm(self):
  167. self.assertEqual(self.user1.has_perm('perm', TestObj()), False)
  168. self.assertEqual(self.user1.has_perm('anon', TestObj()), True)
  169. def test_has_perms(self):
  170. self.assertEqual(self.user1.has_perms(['anon'], TestObj()), True)
  171. self.assertEqual(self.user1.has_perms(['anon', 'perm'], TestObj()), False)
  172. def test_has_module_perms(self):
  173. self.assertEqual(self.user1.has_module_perms("app1"), True)
  174. self.assertEqual(self.user1.has_module_perms("app2"), False)
  175. def test_get_all_permissions(self):
  176. self.assertEqual(self.user1.get_all_permissions(TestObj()), set(['anon']))
  177. class NoAnonymousUserBackendTest(TestCase):
  178. """
  179. Tests that AnonymousUser does not delegate to backend if it has 'supports_anonymous_user' = False
  180. """
  181. backend = 'django.contrib.auth.tests.auth_backends.NoAnonymousUserBackend'
  182. def setUp(self):
  183. self.curr_auth = settings.AUTHENTICATION_BACKENDS
  184. settings.AUTHENTICATION_BACKENDS = tuple(self.curr_auth) + (self.backend,)
  185. self.user1 = AnonymousUser()
  186. def tearDown(self):
  187. settings.AUTHENTICATION_BACKENDS = self.curr_auth
  188. def test_has_perm(self):
  189. self.assertEqual(self.user1.has_perm('perm', TestObj()), False)
  190. self.assertEqual(self.user1.has_perm('anon', TestObj()), False)
  191. def test_has_perms(self):
  192. self.assertEqual(self.user1.has_perms(['anon'], TestObj()), False)
  193. def test_has_module_perms(self):
  194. self.assertEqual(self.user1.has_module_perms("app1"), False)
  195. self.assertEqual(self.user1.has_module_perms("app2"), False)
  196. def test_get_all_permissions(self):
  197. self.assertEqual(self.user1.get_all_permissions(TestObj()), set())