Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class BaseAccessMixin(AccessMixin):
- """
- Base mixin for checking user access rights
- """
- permission_denied_message = 'You don\'t have enough permissions'
- _denied_url = None
- def handle_no_permission(self):
- self._add_message_only_once(self.get_permission_denied_message())
- denied_url = self._get_denied_url()
- if denied_url:
- return HttpResponseRedirect(denied_url)
- if self.request.user.is_authenticated:
- return HttpResponseRedirect(reverse('users:redirect'))
- return redirect_to_login(
- self.request.get_full_path(),
- self.get_login_url(),
- self.get_redirect_field_name()
- )
- def dispatch(self, request, *args, **kwargs):
- if not self.has_access(*args, **kwargs):
- return self.handle_no_permission()
- return super().dispatch(request, *args, **kwargs)
- def has_access(self, *args, **kwargs):
- if not self.request.user.is_authenticated:
- return False
- if self.request.user.is_ibis_superadmin:
- return True
- return self._has_access(*args, **kwargs)
- def _has_access(self, *args, **kwargs):
- return False
- def _get_previous_url(self):
- previous_url = self.request.META.get('HTTP_REFERER')
- current_path = self.request.get_full_path()
- if previous_url and current_path and current_path not in previous_url:
- return previous_url
- return None
- def _get_denied_url(self):
- if self._denied_url:
- return reverse(self._denied_url)
- previous_url = self._get_previous_url()
- if previous_url:
- return previous_url
- return None
- def _add_message_only_once(self, text, level=messages.WARNING):
- is_already_exists = False
- for message in messages.get_messages(self.request):
- message_text = str(message)
- if message_text == text:
- is_already_exists = True
- messages.add_message(self.request, message.level, message_text)
- if not is_already_exists:
- messages.add_message(self.request, level, text)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement