在CBV中使用Django“规则”无效

时间:2019-01-22 05:39:40

标签: django permissions predicate django-2.0

我在使用带有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

0 个答案:

没有答案