J'ai un modèle django et je veux que ce modèle soit accessible uniquement par son propriétaire (utilisateur qui a créé le modèle). Donc, j'ai créé une classe d'autorisation comme suitDjango: Comment limiter l'autorisation d'accès à la liste des modèles à son propriétaire?
class IsOwnerOnly(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
# Write permissions are only allowed to the owner of the snippet.
return obj.owner == request.user
et appliqué cette autorisation sur modelviewset
class ItemViewSet(viewsets.ModelViewSet):
queryset = Item.objects.all()
serializer_class = ItemSerializer
permission_classes = (IsOwnerOnly,)
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
Alors que l'accès à un seul article, il fonctionne, mais même alors chaque utilisateur authentifié peut accéder à la liste des articles. Alors, comment pourrais-je limiter l'accès de l'élément à son seul propriétaire?
J'ai inclus Tokenauthentication dans la page des paramètres comme indiqué
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
),
}
et l'élément ressemble
class Item(models.Model):
name=models.CharField(max_length=30)
address=models.TextField()
owner = models.ForeignKey('auth.User', related_name='items', on_delete=models.CASCADE)
def __str__(self):
return self.name
'retour obj.owner == request.user', est' owner' un champ modèle 'Item'? et vous ne pouvez pas contrôler qui peut accéder à la liste des articles par le propriétaire, si vous quoi, vous devez remplacer 'has_permission' à la classe' IsOwnerOnly' – Ykh
yup. c'est un champ –
je l'ai inclus maintenant. pls vérifier –