Как отменить разрешение на список с помощью правил django-rules

Я установил django-rules в свой проект, чтобы определить правила для моих действий. Функция list по умолчанию не имеет настроек разрешения, поэтому приходится добавлять их в permission_type_map, как написано здесь, но без эффекта. Для других действий я могу изменить поведение, если я установлю его на is_superuser или что-то еще.

from django.db import models

import rules
from rules.contrib.models import RulesModel
from rules.contrib.rest_framework import AutoPermissionViewSetMixin

from base.models import BaseModel


class Company(RulesModel, BaseModel):
    name = models.CharField(max_length=100)
    active = models.BooleanField(default=True)

    permission_type_map = {
        **AutoPermissionViewSetMixin.permission_type_map,
        "list": "all",
    }

    class Meta:
        rules_permissions = {
            # TODO: rules need to be defined
            "add": rules.always_allow,
            "view": rules.always_allow,
            "delete": rules.always_allow,
            "change": rules.always_allow,
            "all": rules.is_superuser
        }

Что мне здесь не хватает?

Я новичок в django-rules, но из того, что я вижу в docs, вы можете расширять/изменять permission_type_map только при использовании или подклассификации AutoPermissionViewSetMixin. Попробуйте вместо этого определить дикту permission_type_map в классе ViewSet:

from rest_framework import viewsets
from rules.contrib.rest_framework import AutoPermissionViewSetMixin

class MyViewSet(AutoPermissionViewSetMixin, viewsets.ModelViewSet):

    permission_type_map = {
        **AutoPermissionViewSetMixin.permission_type_map,
        "list": "all",
    }

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