maquinaweb-shared-auth 0.1.3__tar.gz → 0.1.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of maquinaweb-shared-auth might be problematic. Click here for more details.

Files changed (23) hide show
  1. {maquinaweb_shared_auth-0.1.3 → maquinaweb_shared_auth-0.1.4}/PKG-INFO +1 -1
  2. {maquinaweb_shared_auth-0.1.3 → maquinaweb_shared_auth-0.1.4}/maquinaweb_shared_auth.egg-info/PKG-INFO +1 -1
  3. {maquinaweb_shared_auth-0.1.3 → maquinaweb_shared_auth-0.1.4}/pyproject.toml +1 -1
  4. {maquinaweb_shared_auth-0.1.3 → maquinaweb_shared_auth-0.1.4}/shared_auth/mixins.py +58 -0
  5. {maquinaweb_shared_auth-0.1.3 → maquinaweb_shared_auth-0.1.4}/README.md +0 -0
  6. {maquinaweb_shared_auth-0.1.3 → maquinaweb_shared_auth-0.1.4}/maquinaweb_shared_auth.egg-info/SOURCES.txt +0 -0
  7. {maquinaweb_shared_auth-0.1.3 → maquinaweb_shared_auth-0.1.4}/maquinaweb_shared_auth.egg-info/dependency_links.txt +0 -0
  8. {maquinaweb_shared_auth-0.1.3 → maquinaweb_shared_auth-0.1.4}/maquinaweb_shared_auth.egg-info/requires.txt +0 -0
  9. {maquinaweb_shared_auth-0.1.3 → maquinaweb_shared_auth-0.1.4}/maquinaweb_shared_auth.egg-info/top_level.txt +0 -0
  10. {maquinaweb_shared_auth-0.1.3 → maquinaweb_shared_auth-0.1.4}/setup.cfg +0 -0
  11. {maquinaweb_shared_auth-0.1.3 → maquinaweb_shared_auth-0.1.4}/setup.py +0 -0
  12. {maquinaweb_shared_auth-0.1.3 → maquinaweb_shared_auth-0.1.4}/shared_auth/__init__.py +0 -0
  13. {maquinaweb_shared_auth-0.1.3 → maquinaweb_shared_auth-0.1.4}/shared_auth/authentication.py +0 -0
  14. {maquinaweb_shared_auth-0.1.3 → maquinaweb_shared_auth-0.1.4}/shared_auth/conf.py +0 -0
  15. {maquinaweb_shared_auth-0.1.3 → maquinaweb_shared_auth-0.1.4}/shared_auth/decorators.py +0 -0
  16. {maquinaweb_shared_auth-0.1.3 → maquinaweb_shared_auth-0.1.4}/shared_auth/exceptions.py +0 -0
  17. {maquinaweb_shared_auth-0.1.3 → maquinaweb_shared_auth-0.1.4}/shared_auth/fields.py +0 -0
  18. {maquinaweb_shared_auth-0.1.3 → maquinaweb_shared_auth-0.1.4}/shared_auth/managers.py +0 -0
  19. {maquinaweb_shared_auth-0.1.3 → maquinaweb_shared_auth-0.1.4}/shared_auth/middleware.py +0 -0
  20. {maquinaweb_shared_auth-0.1.3 → maquinaweb_shared_auth-0.1.4}/shared_auth/models.py +0 -0
  21. {maquinaweb_shared_auth-0.1.3 → maquinaweb_shared_auth-0.1.4}/shared_auth/permissions.py +0 -0
  22. {maquinaweb_shared_auth-0.1.3 → maquinaweb_shared_auth-0.1.4}/shared_auth/router.py +0 -0
  23. {maquinaweb_shared_auth-0.1.3 → maquinaweb_shared_auth-0.1.4}/shared_auth/serializers.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: maquinaweb-shared-auth
3
- Version: 0.1.3
3
+ Version: 0.1.4
4
4
  Summary: Models read-only para autenticação compartilhada entre projetos Django.
5
5
  Author-email: Seu Nome <seuemail@dominio.com>
6
6
  License: MIT
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: maquinaweb-shared-auth
3
- Version: 0.1.3
3
+ Version: 0.1.4
4
4
  Summary: Models read-only para autenticação compartilhada entre projetos Django.
5
5
  Author-email: Seu Nome <seuemail@dominio.com>
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "maquinaweb-shared-auth"
7
- version = "0.1.3"
7
+ version = "0.1.4"
8
8
  description = "Models read-only para autenticação compartilhada entre projetos Django."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13"
@@ -3,6 +3,8 @@ Mixins para facilitar a criação de models com referências ao sistema de auth
3
3
  """
4
4
 
5
5
  from django.db import models
6
+ from rest_framework import viewsets, status
7
+ from rest_framework.response import Response
6
8
 
7
9
  from shared_auth.managers import BaseAuthManager
8
10
 
@@ -190,6 +192,62 @@ class OrganizationUserMixin(OrganizationMixin, UserMixin):
190
192
  .exists()
191
193
  )
192
194
 
195
+ class LoggedOrganizationMixin(viewsets.ModelViewSet):
196
+ """
197
+ Mixin para ViewSets que dependem de uma organização logada.
198
+ Integra com a lib maquinaweb-shared-auth.
199
+ """
200
+
201
+ def get_organization_id(self):
202
+ """Obtém o ID da organização logada via maquinaweb-shared-auth"""
203
+ return self.request.organization_id
204
+
205
+ def get_user(self):
206
+ """Obtém o usuário atual autenticado"""
207
+ return self.request.user
208
+
209
+ def check_logged_organization(self):
210
+ """Verifica se há uma organização logada"""
211
+ return self.get_organization_id() is not None
212
+
213
+ def require_logged_organization(self):
214
+ """Retorna erro se não houver organização logada"""
215
+ if not self.check_logged_organization():
216
+ return Response(
217
+ {
218
+ "detail": "Nenhuma organização logada. Defina uma organização antes de continuar."
219
+ },
220
+ status=status.HTTP_403_FORBIDDEN,
221
+ )
222
+ return None
223
+
224
+ def get_queryset(self):
225
+ """Filtra os objetos pela organização logada, se aplicável"""
226
+ queryset = super().get_queryset()
227
+
228
+ response = self.require_logged_organization()
229
+ if response:
230
+ return queryset.none()
231
+
232
+ organization_id = self.get_organization_id()
233
+ if hasattr(queryset.model, "organization_id"):
234
+ return queryset.filter(organization_id=organization_id)
235
+ elif hasattr(queryset.model, "organization"):
236
+ return queryset.filter(organization_id=organization_id)
237
+ return queryset
238
+
239
+ def perform_create(self, serializer):
240
+ """Define a organização automaticamente ao criar um objeto"""
241
+ response = self.require_logged_organization()
242
+ if response:
243
+ return response
244
+
245
+ organization_id = self.get_organization_id()
246
+
247
+ if "organization" in serializer.fields:
248
+ serializer.save(organization_id=organization_id)
249
+ else:
250
+ serializer.save()
193
251
 
194
252
  class TimestampedMixin(models.Model):
195
253
  """