from django.contrib.auth.decorators import user_passes_test from functools import wraps from django.shortcuts import redirect from django.core.exceptions import PermissionDenied def is_in_group(user, group_name): return user.groups.filter(name=group_name).exists() def group_required(group_name): return user_passes_test(lambda u: is_in_group(u, group_name)) def custom_permission_required(perm, raise_exception=False): def decorator(view_func): @wraps(view_func) def _wrapped_view(request, *args, **kwargs): if request.user.has_perm(perm): return view_func(request, *args, **kwargs) if raise_exception: raise PermissionDenied return redirect('error_page') return _wrapped_view return decorator