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