vkk.workhours.manager.mixins

This submodule contains a collection of mixin classes.

 1"""
 2This submodule contains a collection of mixin classes.
 3"""
 4
 5from django.contrib.auth.mixins import AccessMixin
 6from django.utils import timezone
 7from ..models import Project, ProjectManager
 8
 9
10class ManagerRequiredMixin(AccessMixin):
11    """
12    A mixin for verifying whether the current user is a manager of the given project.
13    """
14    check_field = None
15
16    def dispatch(self, request, *args, **kwargs):
17        """
18        Overrides the `dispatch()` method of a class based view. If a user is not
19         a manager of the given project, they are redirected.
20        """
21        project = Project.objects.filter(
22            invoice_number=kwargs.get('invoice_number')
23        )
24        manager = ProjectManager.objects.filter(
25            manager=request.user,
26            project=project[0]
27        )
28        if (not request.user.is_authenticated or
29            not project.exists() or
30            not manager.exists() or
31            manager[0].end < timezone.now().date()
32            ):
33            return self.handle_no_permission()
34        if (self.check_field is not None and
35                not self.model.objects.filter(
36                    **{(self.check_field + '__invoice_number'): kwargs.get('invoice_number')}
37                ).exists()):
38            return self.handle_no_permission()
39        return super().dispatch(request, *args, **kwargs)
class ManagerRequiredMixin(django.contrib.auth.mixins.AccessMixin):
11class ManagerRequiredMixin(AccessMixin):
12    """
13    A mixin for verifying whether the current user is a manager of the given project.
14    """
15    check_field = None
16
17    def dispatch(self, request, *args, **kwargs):
18        """
19        Overrides the `dispatch()` method of a class based view. If a user is not
20         a manager of the given project, they are redirected.
21        """
22        project = Project.objects.filter(
23            invoice_number=kwargs.get('invoice_number')
24        )
25        manager = ProjectManager.objects.filter(
26            manager=request.user,
27            project=project[0]
28        )
29        if (not request.user.is_authenticated or
30            not project.exists() or
31            not manager.exists() or
32            manager[0].end < timezone.now().date()
33            ):
34            return self.handle_no_permission()
35        if (self.check_field is not None and
36                not self.model.objects.filter(
37                    **{(self.check_field + '__invoice_number'): kwargs.get('invoice_number')}
38                ).exists()):
39            return self.handle_no_permission()
40        return super().dispatch(request, *args, **kwargs)

A mixin for verifying whether the current user is a manager of the given project.

check_field = None
def dispatch(self, request, *args, **kwargs):
17    def dispatch(self, request, *args, **kwargs):
18        """
19        Overrides the `dispatch()` method of a class based view. If a user is not
20         a manager of the given project, they are redirected.
21        """
22        project = Project.objects.filter(
23            invoice_number=kwargs.get('invoice_number')
24        )
25        manager = ProjectManager.objects.filter(
26            manager=request.user,
27            project=project[0]
28        )
29        if (not request.user.is_authenticated or
30            not project.exists() or
31            not manager.exists() or
32            manager[0].end < timezone.now().date()
33            ):
34            return self.handle_no_permission()
35        if (self.check_field is not None and
36                not self.model.objects.filter(
37                    **{(self.check_field + '__invoice_number'): kwargs.get('invoice_number')}
38                ).exists()):
39            return self.handle_no_permission()
40        return super().dispatch(request, *args, **kwargs)

Overrides the dispatch() method of a class based view. If a user is not a manager of the given project, they are redirected.

Inherited Members
django.contrib.auth.mixins.AccessMixin
login_url
permission_denied_message
raise_exception
redirect_field_name
get_login_url
get_permission_denied_message
get_redirect_field_name
handle_no_permission