20 lines
810 B
Python
20 lines
810 B
Python
from functools import wraps
|
|
from django.shortcuts import redirect
|
|
from django.contrib import messages
|
|
|
|
|
|
def role_required(*group_names):
|
|
"""Decorator that checks if the user belongs to at least one of the specified groups."""
|
|
def decorator(view_func):
|
|
@wraps(view_func)
|
|
def wrapper(request, *args, **kwargs):
|
|
if request.user.is_superuser:
|
|
return view_func(request, *args, **kwargs)
|
|
user_groups = request.user.groups.values_list('name', flat=True)
|
|
if any(group in user_groups for group in group_names):
|
|
return view_func(request, *args, **kwargs)
|
|
messages.error(request, 'No tienes permisos para acceder a esta sección.')
|
|
return redirect('dashboard')
|
|
return wrapper
|
|
return decorator
|