【问题标题】:django-guardian custom user permissionsdjango-guardian 自定义用户权限
【发布时间】:2014-01-10 06:38:28
【问题描述】:

设置

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


问题

django-guardian 抛出 AttributeError: type object 'MyCustomUser' has no attribute 'groups' 错误(MyCustomUser 是我的自定义用户类)每当我尝试 get 与用户相关的权限时,即当我添加权限时,它直接进入 @ 987654326@ 表,应该的。但是,调用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. 由于开发者有warned,监护人可能不兼容自定义用户?

【问题讨论】:

    标签: python django django-models user-permissions django-guardian


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-25
      • 2013-09-28
      • 2016-07-31
      • 2013-02-27
      • 2013-12-21
      • 2023-03-29
      相关资源
      最近更新 更多