设置
我刚刚开始与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)
可能的解决方案
设置身份验证后端可能存在问题。我目前将其设置为:
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend', 'guardian.backends.ObjectPermissionBackend',
)
也许实现自定义用户 => 更改/实现自定义组?目前我在 admin.py 中有 admin.site.unregister(Group),但更改它并没有帮助。
正如开发人员警告的那样,监护人可能与自定义用户不兼容?