2024-06-05 14:05:45 +08:00
|
|
|
from django.contrib.auth.decorators import user_passes_test
|
2024-06-14 16:47:43 +08:00
|
|
|
from functools import wraps
|
|
|
|
from django.shortcuts import redirect
|
|
|
|
from django.core.exceptions import PermissionDenied
|
2024-06-05 14:05:45 +08:00
|
|
|
|
|
|
|
|
|
|
|
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))
|
2024-06-14 16:47:43 +08:00
|
|
|
|
|
|
|
|
|
|
|
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
|