feature/rbac permisos y roles implementados
This commit is contained in:
@@ -6,10 +6,13 @@ from rest_framework.response import Response
|
||||
|
||||
from api.record.models import Document
|
||||
from core.permissions import (
|
||||
IsSameOrganization,
|
||||
IsSameOrganization,
|
||||
IsSameOrganizationDeveloper,
|
||||
IsSameOrganizationAndAdmin,
|
||||
IsSuperUser
|
||||
IsSuperUser,
|
||||
get_org_context,
|
||||
is_internal_service_request,
|
||||
user_has_permission,
|
||||
)
|
||||
from .serializers import OrganizacionSerializer, UsoAlmacenamientoSerializer
|
||||
from .models import Organizacion, UsoAlmacenamiento
|
||||
@@ -32,21 +35,19 @@ class ViewSetOrganizacion(LoggingMixin, viewsets.ModelViewSet, OrganizacionFiltr
|
||||
my_tags = ['Organizaciones']
|
||||
|
||||
def get_queryset(self):
|
||||
if not self.request.user.is_authenticated or not hasattr(self.request.user, 'organizacion'):
|
||||
user = self.request.user
|
||||
if not user.is_authenticated:
|
||||
return Organizacion.objects.none()
|
||||
|
||||
if self.request.user.is_superuser:
|
||||
# Superuser can see all organizations
|
||||
|
||||
if is_internal_service_request(self.request):
|
||||
return Organizacion.objects.all()
|
||||
|
||||
if (self.request.user.groups.filter(name='admin').exists() or self.request.user.groups.filter('developer').exists() or self.request.user.groups.filter('user')) and self.request.user.groups.filter(name='Agente Aduanal').exists():
|
||||
# Importers can only see their own organization
|
||||
return Organizacion.objects.filter(users=self.request.user)
|
||||
|
||||
if self.request.user.groups.filter(name='importador').exists():
|
||||
return Organizacion.objects.filter(users=self.request.user)
|
||||
|
||||
return Organizacion.objects.none()
|
||||
|
||||
org = get_org_context(user)
|
||||
if not org:
|
||||
return Organizacion.objects.none()
|
||||
|
||||
# Superuser ve solo su org activa, no todas
|
||||
return Organizacion.objects.filter(id=org.id)
|
||||
|
||||
class UsoAlmacenamientoViewSet(LoggingMixin, viewsets.ReadOnlyModelViewSet):
|
||||
"""
|
||||
@@ -60,31 +61,26 @@ class UsoAlmacenamientoViewSet(LoggingMixin, viewsets.ReadOnlyModelViewSet):
|
||||
my_tags = ['Uso de Almacenamiento']
|
||||
|
||||
def get_queryset(self):
|
||||
if not self.request.user.is_authenticated or not hasattr(self.request.user, 'organizacion'):
|
||||
if not self.request.user.is_authenticated:
|
||||
return UsoAlmacenamiento.objects.none()
|
||||
|
||||
|
||||
if self.request.user.is_superuser:
|
||||
# Superuser can see all storage usage
|
||||
if is_internal_service_request(self.request):
|
||||
return UsoAlmacenamiento.objects.all()
|
||||
|
||||
if (self.request.user.groups.filter(name='developer').exists() or
|
||||
self.request.user.groups.filter(name='admin').exists() or
|
||||
self.request.user.groups.filter(name='user').exists()) and self.request.user.groups.filter(name='Agente Aduanal').exists():
|
||||
# Developers, Admins, and Users can see their organization's storage usage
|
||||
return UsoAlmacenamiento.objects.filter(organizacion=self.request.user.organizacion)
|
||||
|
||||
if self.request.user.groups.filter(name='importador').exists():
|
||||
# Importers can only see their own organization's storage usage
|
||||
|
||||
org = get_org_context(self.request.user)
|
||||
if not org:
|
||||
return UsoAlmacenamiento.objects.none()
|
||||
|
||||
if self.request.user.is_importador:
|
||||
raise PermissionDenied("Los importadores no tienen acceso al uso de almacenamiento.")
|
||||
|
||||
return UsoAlmacenamiento.objects.none()
|
||||
return UsoAlmacenamiento.objects.filter(organizacion=org)
|
||||
|
||||
@action(detail=False, methods=['get'])
|
||||
def mi_organizacion(self, request):
|
||||
|
||||
"""Obtiene el uso de almacenamiento de la organización del usuario actual"""
|
||||
organizacion = request.user.organizacion
|
||||
organizacion = get_org_context(request.user)
|
||||
|
||||
# Obtener o crear el registro de uso
|
||||
uso, created = UsoAlmacenamiento.objects.get_or_create(
|
||||
|
||||
Reference in New Issue
Block a user