from django.core.exceptions import PermissionDenied def role_required(allowed_roles): """ Usage: @role_required(["manager", "businessman"]) def view(request): ... """ def decorator(view_func): def _wrapped_view(request, *args, **kwargs): if request.user.role not in allowed_roles: raise PermissionDenied return view_func(request, *args, **kwargs) return _wrapped_view return decorator