Open pablodanielrey opened 2 years ago
voy a usar los permisos que define django automáticmaente para los modelos y definir permisos propios para nuestra funcionalidad que los verifica. dfino una clase base para todos los permisos:
` from rest_framework import permissions
class PermisoBase(permissions.BasePermission):
def get_model(self):
return ""
def has_object_permission(self, request, view, obj):
if request.method in permissions.SAFE_METHODS:
return request.user.has_perm(f'turnos.view_{self.get_model()}')
return request.user.has_perm(f'turnos.change_{self.get_model()}') or request.user.has_perm(f'turnos.delete_{self.get_model()}')
def has_permission(self, request, view):
if request.method in permissions.SAFE_METHODS:
return request.user.has_perm(f'turnos.view_{self.get_model()}')
return request.user.has_perm(f'turnos.add_{self.get_model()}')
`
e implemento por ejemplo la del parámetro de turnos que solo deberia tener el configurador.
` from login import permissions
class ParametroTurnosPermisos(permissions.PermisoBase):
def get_model(self):
return 'parametrodeturnos'
`
en las vistas es solo cuestion de definirle la clase de permiso necesario. `class VistaParametroTurnos(viewsets.ModelViewSet): queryset = models.ParametroDeTurnos.objects.all() serializer_class = serializers.SerializadorParametroTurnos permission_classes = [ permissions.ParametroTurnosPermisos ]
`
listo el login ya retorna los permisos en forma de lista.
{ "token": "249904af7191dea34d39fef4766cffff6728c476", "persona": { "id": "abcc3e42-8bb1-4782-a612-c5df4728e3e7", "nombre": "Empleado1", "apellido": "Apellido1", "email": "empleo1@gmail.com", "dni": null, "fecha_nacimiento": null, "telefono": null, "direccion": null }, "roles": [ "Empleados" ], "cambiar_clave": false, "permisos": [ "add_parametrodeturnos", "view_turnoconfirmado", "add_turnoconfirmado", "delete_parametrodeturnos", "change_parametrodeturnos", "change_turnoconfirmado", "delete_turnoconfirmado", "view_parametrodeturnos" ] }
solo falta agregar todas las clases a las vistas principales.
lo mejor seria aplicar los permisos que da django. definir las clases de permisos para las vistas y configurar eso. pasarle al front esos permisos por usuairo. comienzo a investigar ese tema.