Guest User

Untitled

a guest
Oct 24th, 2018
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.36 KB | None | 0 0
  1. from django.conf import settings
  2. from django.contrib.auth.hashers import check_password
  3. from django.contrib.auth.models import User
  4.  
  5. class SettingsBackend:
  6. """
  7. Authenticate against the settings ADMIN_LOGIN and ADMIN_PASSWORD.
  8.  
  9. Use the login name and a hash of the password. For example:
  10.  
  11. ADMIN_LOGIN = 'admin'
  12. ADMIN_PASSWORD = 'pbkdf2_sha256$30000$Vo0VlMnkR4Bk$qEvtdyZRWTcOsCnI/oQ7fVOu1XAURIZYoOZ3iq8Dr4M='
  13. """
  14.  
  15. def authenticate(self, request, username=None, password=None):
  16. login_valid = (settings.ADMIN_LOGIN == username)
  17. pwd_valid = check_password(password, settings.ADMIN_PASSWORD)
  18. if login_valid and pwd_valid:
  19. try:
  20. user = User.objects.get(username=username)
  21. except User.DoesNotExist:
  22. # Create a new user. There's no need to set a password
  23. # because only the password from settings.py is checked.
  24. user = User(username=username)
  25. user.is_staff = True
  26. user.is_superuser = True
  27. user.save()
  28. return user
  29. return None
  30.  
  31. def get_user(self, user_id):
  32. try:
  33. return User.objects.get(pk=user_id)
  34. except User.DoesNotExist:
  35. return None
  36.  
  37. #Set permission in model
  38. -------------------------------------------------------------------------------
  39. class Task(models.Model):
  40. ...
  41. class Meta:
  42. permissions = (
  43. ("change_task_status", "Can change the status of tasks"),
  44. ("close_task", "Can remove a task by setting its status as closed"),
  45. )
  46.  
  47. #Check permission
  48. --------------------------------------------------------------------------------
  49. user.has_perm('app.close_task')
  50.  
  51. #Permission Scheme:
  52. ---------------------------------------------------------------------------------
  53. myuser.groups.set([group_list])
  54. myuser.groups.add(group, group, ...)
  55. myuser.groups.remove(group, group, ...)
  56. myuser.groups.clear()
  57. myuser.user_permissions.set([permission_list])
  58. myuser.user_permissions.add(permission, permission, ...)
  59. myuser.user_permissions.remove(permission, permission, ...)
  60. myuser.user_permissions.clear()
  61.  
  62. Assuming you have an application with an app_label foo and a model named Bar, to test for basic permissions you should use:
  63.  
  64. add: user.has_perm('foo.add_bar')
  65. change: user.has_perm('foo.change_bar')
  66. delete: user.has_perm('foo.delete_bar')
  67. view: user.has_perm('foo.view_bar')
  68.  
  69. #Creating permission
  70. ------------------------------------------------------------------------------------
  71. from myapp.models import BlogPost
  72. from django.contrib.auth.models import Permission
  73. from django.contrib.contenttypes.models import ContentType
  74.  
  75. content_type = ContentType.objects.get_for_model(BlogPost)
  76. permission = Permission.objects.create(
  77. codename='can_publish',
  78. name='Can Publish Posts',
  79. content_type=content_type,
  80. )
  81.  
  82. #Example
  83. -------------------------------------------------------------------------------------
  84. from django.contrib.auth.models import Permission, User
  85. from django.contrib.contenttypes.models import ContentType
  86. from django.shortcuts import get_object_or_404
  87.  
  88. from myapp.models import BlogPost
  89.  
  90. def user_gains_perms(request, user_id):
  91. user = get_object_or_404(User, pk=user_id)
  92. # any permission check will cache the current set of permissions
  93. user.has_perm('myapp.change_blogpost')
  94.  
  95. content_type = ContentType.objects.get_for_model(BlogPost)
  96. permission = Permission.objects.get(
  97. codename='change_blogpost',
  98. content_type=content_type,
  99. )
  100. user.user_permissions.add(permission)
  101.  
  102. # Checking the cached permission set
  103. user.has_perm('myapp.change_blogpost') # False
  104.  
  105. # Request new instance of User
  106. # Be aware that user.refresh_from_db() won't clear the cache.
  107. user = get_object_or_404(User, pk=user_id)
  108.  
  109. # Permission cache is repopulated from the database
  110. user.has_perm('myapp.change_blogpost') # True
  111.  
  112. #Redirect
  113. -------------------------------------------------------------------------------
  114. from django.conf import settings
  115. from django.shortcuts import redirect
  116.  
  117. def my_view(request):
  118. if not request.user.is_authenticated:
  119. return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
  120. # ...
  121.  
  122. OR
  123.  
  124. from django.shortcuts import render
  125.  
  126. def my_view(request):
  127. if not request.user.is_authenticated:
  128. return render(request, 'myapp/login_error.html')
Add Comment
Please, Sign In to add comment