Я столкнулся с проблемой при использовании правил с 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