0

Le problèmeautorisations d'objet avec un accès en lecture seule pour les utilisateurs anonymes dans Django Rest Framework

J'utilise Django REST cadre - et jusqu'à présent j'utilise la classe DjangoObjectPermissions des autorisations. J'utilise django-rules pour déterminer quels utilisateurs ont des autorisations pour les objets. Toutefois, cette classe d'autorisations semble refuser l'accès en lecture aux utilisateurs anonymes.

J'ai besoin de trouver le meilleur moyen d'autoriser l'accès en lecture seule à tous les utilisateurs (authentifiés ou non). Pour les ajouts, les modifications et les suppressions, les autorisations d'objets doivent être appliquées normalement.

Quelle est la meilleure approche pour résoudre ce problème? Django ne semble pas fournir d'autorisation can_view par défaut. Cela peut impliquer l'ajout manuel d'une autorisation can_view pour chaque modèle. Ou peut-être qu'il est préférable d'implémenter une classe d'autorisations DjangoObjectPermissionsOrAnonReadOnly?

Répondre

1

Le correctif était en fait très simple. Il est possible de créer une classe d'autorisations personnalisée qui étend DjangoObjectPermissions et de remplacer la variable authenticated_users_only.

class DjangoObjectPermissionsOrAnonReadOnly(DjangoObjectPermissions): 
    authenticated_users_only = False 
0
from rest_framework import permissions 

et juste donner

permission_classes = [permissions.IsAuthenticatedOrReadOnly, YourPermissionshere, ] 

dans votre viewset. Cela fera le travail. sinon authentifiés, les utilisateurs anonymes vont recevoir une autorisation de lecture seule

vous pouvez contrôler quand les autorisations sont vérifiées et non vérifiées par la manipulation de la fonction

self.check_object_permissions(self.request, obj) 
+0

permission_classes = [permissions.IsAuthenticatedOrReadOnly, YourPermissionsHere] –

+0

De la documentation Permission DRF, il semble que l'utilisateur doit disposer des autorisations dans toutes les classes d'autorisations pour que le chèque à passer? Donc, dans ce cas, 'IsAuthenticatedOrReadOnly' passerait mais' YourPermissionsHere' = 'DjangoObjectPermissions' échouerait? Est-ce correct? – Kieran

+0

Oui. Toutes les classes d'autorisations doivent satisfaire. vous pouvez essayer la même chose. Ça devrait marcher. –