Mixins¶
django-minosse provides two mixins for protecting class-based views.
Both extend Django's AccessMixin, so the standard login_url and raise_exception
attributes are honoured.
RoleRequiredMixin¶
Restricts a class-based view to users that belong to a specific role.
from django.views import View
from minosse.mixin import RoleRequiredMixin
from .roles import EditorRole
class EditorDashboardView(RoleRequiredMixin, View):
required_role_class = EditorRole
def get(self, request):
...
Attributes¶
| Attribute | Type | Description |
|---|---|---|
required_role_class |
AbstractRole subclass |
Required. The role the user must have. |
Warning
If required_role_class is not set, dispatch() raises ValueError.
Behaviour¶
dispatch() calls required_role_class.user_has_role(request.user). When access is
denied, handle_no_permission() is called — which either redirects to login_url or
raises PermissionDenied depending on raise_exception.
PermissionRequiredMixin¶
Restricts a class-based view to users that have a specific permission codename.
from django.views import View
from minosse.mixin import PermissionRequiredMixin
class PublishView(PermissionRequiredMixin, View):
required_permission_codename = "auth.can_publish"
def post(self, request):
...
Attributes¶
| Attribute | Type | Description |
|---|---|---|
required_permission_codename |
str |
Required. Full permission string in app_label.codename form (e.g. "auth.can_publish"). |
Warning
If required_permission_codename is not set, dispatch() raises ValueError.
Permission app label
django-minosse links all permissions to the auth.user content type, so the
app label is always auth. Use "auth.<codename>".
Behaviour¶
dispatch() calls request.user.has_perm(required_permission_codename). When access is
denied, handle_no_permission() is called.