我在使用带有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'
但是这不起作用。我已经从another question检查了解决方案,并且正确地拥有:
AUTHENTICATION_BACKENDS = [
'rules.permissions.ObjectPermissionBackend',
'django.contrib.auth.backends.ModelBackend',
'allauth.account.auth_backends.AuthenticationBackend',
]
我无法在这里解决问题。甚至我的谓词is_myuser
中的调试消息也不会打印
我还尝试了更改权限名称并使用add_rule()
。
我正在使用Django == 2.0.8和rules == 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
。
当我在CBV的get_context_data
中检查权限时
print(f"User has permission: {self.request.user.has_perm(self.permission_required, self.get_object())}")
输出:用户具有权限:True
预期的输出:用户具有权限:False
注意:我在Django规则上创建了一个与此有关的问题。 Github