Использование «правил» Django с CBV не работает - PullRequest
0 голосов
/ 22 января 2019

Я столкнулся с проблемой при использовании правил с CBV. Я инициализировал правила так:

rules.add_perm('core.change_user', is_myuser)

Где:

@rules.predicate
def is_myuser(user):
    print('Checking inside from rules')
    return False

И я звоню:

class UserUpdateView(PermissionRequiredMixin, UpdateView):
    model = User
    form_class = UserForm
    template_name = 'forms/user_form.html'
    permission_required = 'core.change_user'

Однако это не работает. Я проверил решение из другой вопрос и у меня правильно есть:

AUTHENTICATION_BACKENDS = [
    'rules.permissions.ObjectPermissionBackend',
    'django.contrib.auth.backends.ModelBackend',
    'allauth.account.auth_backends.AuthenticationBackend',
]

Я не могу понять проблему здесь. Даже сообщение отладки внутри моего предиката is_myuser не печатает

Я также попытался изменить имя разрешения и использовать add_rule(). Я использую Django == 2.0.8 и правила == 2.0

Другие части кода:

Инициализация разрешений в AppConfig:

class CoreConfig(AppConfig):
    name = 'app.core'
    verbose_name = 'My App Config'


def ready(self):
    from .rules import init_rules
    import logging
    logger = logging.getLogger(__name__)
    logger.info('Initializing permissions')
    rules.add_perm('core.change_user', is_myuser)

Я получаю Initializing permissions в логах.

Когда я проверяю разрешение в get_context_data CBV

print(f"User has permission: {self.request.user.has_perm(self.permission_required, self.get_object())}")

Вывод: у пользователя есть разрешение: True

Ожидаемый результат: У пользователя есть разрешение: False

Примечание: я создал проблему, касающуюся того же самого в Django-правилах. Github

...