GOOGLE ADS

martes, 3 de mayo de 2022

permiso basado en la acción/url en Django rest framewrok

Tengo una clase Modelviewset que tiene varias funciones dentro como list(), destroy, shared_update() y también otras funciones personalizadas como def get_examples(self,request). La cuestión es que las diferentes funciones tienen diferentes permisos según los tipos de usuario. Tengo una clase de permiso separada dentro de un archivo de permisos. Ahora necesito acceder a la acción dentro de la función has_permission. Sé que se puede hacer dentro de la función get_permission dentro de la clase modelviewset. Pero, ¿cómo podemos hacerlo dentro de la función has_permission?

Mi vista:

class ExampleView(viewsets.ModelViewSet):
queryset = Example.objects.all().order_by("-created_at")
serializer_class = ExampleSerializer

pagination_class = ExampleNumberPagination

def list(self, request, *args, **kwargs):
def partial_update(self, request, *args, **kwargs):
def custom_fuctin_1(self,request,*args,**kwargs):
def custom_fuctin_2(self,request,*args,**kwargs):
def destroy(self, request, *args, **kwargs):

Ahora archivo de permisos:

class ExampleClassPermission(BasePermission):
def has_permission(self, request, view):
user =request.user
if request.method == 'GET' or request.method == 'POST':
return True
elif request.method == 'DELETE' and (user.role == 'manager' or user.role == 'admin'):
return True
elif request.method == 'PUT':
return True
else:
return False

Aquí, en esta clase de permiso, quiero establecer el permiso para la función personalizada_1 y 2 en la clase de vista. No puedo hacer self.action == ''? al igual que en get_permission. ¿Puedo?


Solución del problema

Puede acceder a la acción usando el viewargumento:

class ExampleClassPermission(BasePermission):
def has_permission(self, request, view):
if view.action == 'list':
# your code here

No hay comentarios:

Publicar un comentario

Regla de Firestore para acceder a la generación de subcolección Permisos faltantes o insuficientes

Tengo problemas con las reglas de Firestore para permitir el acceso a algunos recursos en una subcolección. Tengo algunos requests document...