Пользовательские разрешения/ограничения с помощью DJANGO REST ModelViewSet

Я хочу ограничить доступ/полномочия пользователей в методе создания или уничтожения. Вот сценарий, пользователь с ролью администратора может делать все, что угодно (создавать, получать, обновлять, удалять), в то время как обычный пользователь (клиент) может выполнять только те разрешенные действия (создавать, получать, удалять) для своей связанной модели. Моя модель выглядит следующим образом

class Material(models.Model):
      ingredient  = models.ForeignKey(Ingredient, on_delete=models.CASCADE)   

class UserMaterialAllow(models.Model):
      user = models.ForeignKey(get_user_model())
      material = models.ForeignKey('Material, on_delete=models.CASCADE)

Вот как я добавил пользовательское ограничение

/views/material.py

class MaterialView(viewsets.ModelViewSet):
      queryset=Material.objects.all()
      serializer-class = MaterialSerializer

      def create(self, request, *args, **kwargs):
          if(not app_admin(request.user)): // the user is not admin
              return Response(status=status.HTTP_403_FORBIDDEN)// this will forbid non admin user

В MateralView пользователь не может получить доступ, если он не является администратором. Что мне нужно, если пользователь не является администратором, просто позволить ему выполнять действия, но ограниченные только material belongs to them

    app_admin implemtation


    `def app_admin(user):
         if user.user_is_admin:
             return True
         if user.is_superuser:
             return True
         return False

Есть идеи?

Вы можете использовать роли Django, чтобы определить роли для пользователя и ограничить доступ к странице с помощью роли и установить разрешения на уровне представления. Эти ссылки могут быть полезны

https://medium.com/djangotube/django-roles-groups-and-permissions-introduction-a54d1070544 https://www.django-rest-framework.org/api-guide/permissions/

Вернуться на верх