0

设置

我刚刚开始与django-guardian合作,并立即遇到了一些障碍。我通过扩展 AbstractBaseUser 类来使用自定义用户。我按照这个示例设置了我的 models.py 和 admin.py。我还按照开发人员指南配置指南来设置监护人。


问题

AttributeError: type object 'MyCustomUser' has no attribute 'groups'每当我尝试获取与用户相关的权限时, django-guardian 都会引发错误(MyCustomUser 是我的自定义用户类) ,即当我添加权限时,它会直接进入guardian_userobjectpermission表中,就像它应该的那样。但是,调用get_perms抛出上述错误。

尝试通过管理页面编辑权限时出现相同的错误。(程序上添加的权限不会出现在这里。:/)我写了一个小的 manage.py 任务来测试它:

class Command(BaseCommand):
    def handle(self, *args, **options):
        user1 = MyCustomUser.objects.filter(username='pankaj')[0]
        checker = ObjectPermissionChecker(user1)

        # model on which permissions are applied
        stream = Stream.objects.filter(uuid='001')[0]   

        # works on the database level, doesn't show up on admin page
        assign_perm('read_stream', user1, stream)

        # error
        print 'read_stream' in get_perms(user1, stream)

        # error
        print checker.has_perm('read_stream', stream)

        # error
        print checker.get_perms(stream)

        # works on the database level, doesn't show up on admin page
        remove_perm('read_stream', user, stream)

        # ALWAYS returns True, irrespective of whether permission granted or not
        print user.has_perm('read_stream', stream)

可能的解决方案

  1. 设置身份验证后端可能存在问题。我目前将其设置为:

    AUTHENTICATION_BACKENDS = (

    'django.contrib.auth.backends.ModelBackend',
    
    'guardian.backends.ObjectPermissionBackend',
    

    )

  2. 也许实现自定义用户 => 更改/实现自定义组?目前我在 admin.py 中有 admin.site.unregister(Group),但更改它并没有帮助。

  3. 正如开发人员警告的那样,监护人可能与自定义用户不兼容?

4

1 回答 1

0

根据此处的 django-guardian 文档。Gaurdian 在很大程度上依赖于 django 用户模型的旧时尚。但是你可以通过它,如果你扩展AbstractUser模型,或者定义了与 auth.Group 的 ManyToMany 关系可以在你的身份验证模型中分组。

django-guardian严重依赖auth.User模型。auth.User具体来说,它是通过关系 beteen和auth.Group模型从头开始构建的。保持这种关系对于guardian-没有多对多用户(自定义或默认)和 auth.Group 关系 django-guardian 将 BREAK 至关重要。

于 2014-01-07T08:12:49.140 回答