Jan Dittberner
c94f20f83f
This commit adds a test suite in tests.py, the added setup.cfg contains configuration for coverage, pep8 and flake8. Output files of coverage are ignored. The commit also adds requirements files for tests.
44 lines
1.2 KiB
Python
44 lines
1.2 KiB
Python
"""
|
|
This module defines mixins for gnuviechadmin views.
|
|
|
|
"""
|
|
from __future__ import unicode_literals
|
|
|
|
from django.http import HttpResponseForbidden
|
|
from django.utils.translation import ugettext as _
|
|
|
|
from braces.views import LoginRequiredMixin
|
|
|
|
|
|
class StaffOrSelfLoginRequiredMixin(LoginRequiredMixin):
|
|
"""
|
|
Mixin that makes sure that a user is logged in and matches the current
|
|
customer or is a staff user.
|
|
|
|
"""
|
|
|
|
def dispatch(self, request, *args, **kwargs):
|
|
if (
|
|
request.user.is_staff or
|
|
request.user == self.get_customer_object()
|
|
):
|
|
return super(StaffOrSelfLoginRequiredMixin, self).dispatch(
|
|
request, *args, **kwargs
|
|
)
|
|
return HttpResponseForbidden(
|
|
_('You are not allowed to view this page.')
|
|
)
|
|
|
|
def get_customer_object(self):
|
|
"""
|
|
Views based on this mixin have to implement this method to return
|
|
the customer that must be an object of the same class as the
|
|
django.contrib.auth user type.
|
|
|
|
:return: customer
|
|
:rtype: settings.AUTH_USER_MODEL
|
|
|
|
"""
|
|
raise NotImplementedError(
|
|
"subclass has to implement get_customer_object")
|