pablodanielrey / ttps

práctica de ttps
GNU General Public License v3.0
0 stars 0 forks source link

permisos de la api verificar que funcionen con los perfiles de django #6

Open pablodanielrey opened 2 years ago

pablodanielrey commented 2 years ago

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.

pablodanielrey commented 2 years ago

https://www.django-rest-framework.org/api-guide/permissions/#overview-of-access-restriction-methods

pablodanielrey commented 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 ]

`

pablodanielrey commented 2 years ago

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.