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 view
argumento:
class ExampleClassPermission(BasePermission):
def has_permission(self, request, view):
if view.action == 'list':
# your code here
No hay comentarios:
Publicar un comentario