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

[Dúvida] DjangoModelPermissions permite a vizualização do view, mesmo sem a permissão.

Situação Problema: Ao tentar implementar a solução da professora, criando os cadastros: Paula, Vinicius e Juliana (com suas respectivas permissões) e modificando o "DEFAULT_PERMISSION_CLASSES" em "settings.py" para "DjangoModelPermissions". Me deparei com uma situação inusitada, mesmo com as permissões funcionando corretamente - restringindo os métodos PUT, PUSH, DELETE - todos os três usuários conseguiram acessar os dados usando o método GET. O que diverge do apresentado em aula.

Ao pesquisar na documentação e em fóruns na internet, consegui criar uma solução temporária para resolver o problema, conseguindo restringir a visualização dos dados, conformes as permissões inseridas no admin.

Solução Provisória:

Criei um novo arquivo chamado permissions.py, no qual inseri uma classe para sobrescrever o DjangoModelPermissions.

    
from rest_framework import permissions
import copy

class CustomDjangoModelPermission(permissions.DjangoModelPermissions):

    def __init__(self):
        self.perms_map = copy.deepcopy(self.perms_map) # you need deepcopy when you inherit a dictionary type 
        self.perms_map['GET'] = ['%(app_label)s.view_%(model_name)s']

Após isso, chamei essa classe em DEFAULT_PERMISSION_CLASSES dentro de "settings.py"


    REST_FRAMEWORK = {
        'DEFAULT_AUTHENTICATION_CLASSES': [
            'rest_framework.authentication.BasicAuthentication',
        ],
        'DEFAULT_PERMISSION_CLASSES': [
            'school.permissions.CustomDjangoModelPermission',
        ],
    }

Porém, mesmo seguindo os passos da professora precisei usar essa solução temporária. O que fiz de diferente?

Sites que usei para encontrar a solução: https://www.reddit.com/r/django/comments/xi8dat/comment/ip26ps7/ https://stackoverflow.com/questions/46584653/django-rest-framework-use-djangomodelpermissions-on-listapiview

Meu projeto no github (Branch: third_course): https://github.com/luanvelloza/django-rest-framework-alura/tree/third_course

1 resposta
solução!

Oii, tudo bem?

Entendi a sua situação e é ótimo que você conseguiu encontrar uma solução provisória para o problema. O comportamento que você descreveu é realmente um ponto que pode confundir, mas vamos tentar esclarecer.

O DjangoModelPermissions do Django REST Framework, por padrão, não restringe o método GET. Isso significa que, mesmo que você tenha configurado as permissões corretamente no Django Admin, os usuários ainda poderão acessar os dados usando o método GET, a menos que você especifique explicitamente essa restrição.

A solução que você encontrou é realmente uma maneira eficaz de lidar com isso. Ao sobrescrever a classe DjangoModelPermissions e adicionar a permissão de visualização (view) para o método GET, você garante que apenas os usuários com a permissão específica possam acessar os dados.

Essa abordagem é válida e está de acordo com a documentação do DRF. A diferença em relação ao que foi apresentado em aula pode ser devido a uma versão diferente do DRF ou a um detalhe específico no ambiente de desenvolvimento. Esse "problema" foi resolvido apenas no Django REST framework 3.15 e as versões anteriores ainda permitem o acesso ao GET, independente das permissões do admin.

Espero ter ajudado e bons estudos!