Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] duvida sobre permissão

fiquei com uma duvida nessa parte do codigo:

class MatriculaViewSet(viewsets.ModelViewSet):
    #permission_classes = [IsAuthenticatedOrReadOnly]
    queryset = Matricula.objects.all().order_by('id')
    serializer_class = MatriculaSerializers
    throttle_classes = [UserRateThrottle, MatriculaAnonRateThrottle]
    http_method_names = ["get", "post"]

a duvida é que eu ententei fazer uma verificação para saber se a pessoa que está acessando está com um admin usuario ou não:

class MatriculaViewSet(viewsets.ModelViewSet):
    #permission_classes = [IsAuthenticatedOrReadOnly]
    queryset = Matricula.objects.all().order_by('id')
    serializer_class = MatriculaSerializers
    throttle_classes = [UserRateThrottle, MatriculaAnonRateThrottle]
    if IsAdminUser() != True:
        http_method_names = ["get", "post"]

Porém tentei de alguma formas e essa era a que fazia mais sentido... porém nenhuma alternativa funcionou pois todas as permissões se mantinham iguais para todos usuarios acessando somente o ["get", "post"]

abaixo tem as permissões do usuario que estou entendo que deveria receber apenas o ["get", "post"]

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

e abaixo o meu usuario que entendo que deveria receber acesso ao ["get", "post", "put", "patch", "delete", "head", "options", "trace"]

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta
solução!

Olá, Manuel. Tudo bem?

Para implementar a verificação de permissões com base no tipo de usuário, você pode usar o permission_classes do Django REST Framework. O que você precisa é definir diferentes permissões para usuários comuns e superusuários.

Veja um exemplo de como você pode fazer isso:

from rest_framework.permissions import BasePermission, IsAuthenticated

class IsAdminOrReadOnly(BasePermission):
    def has_permission(self, request, view):
        # Permite GET e POST para todos os usuários autenticados
        if request.method in ['GET', 'POST']:
            return True
        # Permite métodos adicionais apenas para superusuários
        return request.user and request.user.is_superuser

class MatriculaViewSet(viewsets.ModelViewSet):
    permission_classes = [IsAuthenticated, IsAdminOrReadOnly]
    queryset = Matricula.objects.all().order_by('id')
    serializer_class = MatriculaSerializers
    throttle_classes = [UserRateThrottle, MatriculaAnonRateThrottle]
    http_method_names = ["get", "post", "put", "patch", "delete", "head", "options", "trace"]

Neste exemplo, a classe IsAdminOrReadOnly verifica se o usuário é um superusuário para permitir métodos além de GET e POST. Usuários comuns só podem acessar GET e POST.

Espero ter ajudado e bons estudos!.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!