Advertisement
Guest User

Untitled

a guest
Oct 18th, 2017
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.20 KB | None | 0 0
  1.  
  2. class BaseAccessMixin(AccessMixin):
  3.     """
  4.    Base mixin for checking user access rights
  5.    """
  6.  
  7.     permission_denied_message = 'You don\'t have enough permissions'
  8.     _denied_url = None
  9.  
  10.     def handle_no_permission(self):
  11.  
  12.         self._add_message_only_once(self.get_permission_denied_message())
  13.  
  14.         denied_url = self._get_denied_url()
  15.         if denied_url:
  16.             return HttpResponseRedirect(denied_url)
  17.  
  18.         if self.request.user.is_authenticated:
  19.             return HttpResponseRedirect(reverse('users:redirect'))
  20.  
  21.         return redirect_to_login(
  22.             self.request.get_full_path(),
  23.             self.get_login_url(),
  24.             self.get_redirect_field_name()
  25.         )
  26.  
  27.     def dispatch(self, request, *args, **kwargs):
  28.         if not self.has_access(*args, **kwargs):
  29.             return self.handle_no_permission()
  30.         return super().dispatch(request, *args, **kwargs)
  31.  
  32.     def has_access(self, *args, **kwargs):
  33.         if not self.request.user.is_authenticated:
  34.             return False
  35.         if self.request.user.is_ibis_superadmin:
  36.             return True
  37.         return self._has_access(*args, **kwargs)
  38.  
  39.     def _has_access(self, *args, **kwargs):
  40.         return False
  41.  
  42.     def _get_previous_url(self):
  43.         previous_url = self.request.META.get('HTTP_REFERER')
  44.         current_path = self.request.get_full_path()
  45.         if previous_url and current_path and current_path not in previous_url:
  46.             return previous_url
  47.         return None
  48.  
  49.     def _get_denied_url(self):
  50.         if self._denied_url:
  51.             return reverse(self._denied_url)
  52.  
  53.         previous_url = self._get_previous_url()
  54.         if previous_url:
  55.             return previous_url
  56.  
  57.         return None
  58.  
  59.     def _add_message_only_once(self, text, level=messages.WARNING):
  60.  
  61.         is_already_exists = False
  62.         for message in messages.get_messages(self.request):
  63.             message_text = str(message)
  64.             if message_text == text:
  65.                 is_already_exists = True
  66.             messages.add_message(self.request, message.level, message_text)
  67.  
  68.         if not is_already_exists:
  69.             messages.add_message(self.request, level, text)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement