from django.contrib.auth.mixins import UserPassesTestMixin from django.contrib import messages from django.shortcuts import redirect class RoleRequiredMixin(UserPassesTestMixin): """ Mixin para validar si el usuario autenticado pertenece a alguno de los grupos (roles) permitidos. """ allowed_roles = [] redirect_url = 'dashboard' permission_denied_message = 'No tienes permisos para acceder a esta página.' def test_func(self): if self.request.user.is_superuser: return True user_groups = self.request.user.groups.values_list('name', flat=True) for role in self.allowed_roles: if role in user_groups: return True return False def handle_no_permission(self): if not self.request.user.is_authenticated: return redirect('login') messages.error(self.request, self.permission_denied_message) return redirect(self.redirect_url)