Пользовательские разрешения/ограничения с помощью 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/