我刚刚开始与django-guardian合作,并立即遇到了一些障碍。我通过扩展AbstractBaseUser类来使用自定义用户。我按照this示例设置了models.py和admin.py。我还按照developers guide配置指南设置了监护人。
AttributeError: type object 'MyCustomUser' has no attribute 'groups'
错误(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),但更改它无济于事。
由于开发者有warned,监护人可能与自定义用户不兼容?
答案 0 :(得分:0)
根据django-guardian文件here。 Gaurdian在很大程度上依赖于django用户模型的旧时尚。但是,如果扩展AbstractUser
模型,或者使用auth.Group定义了ManyToMany关系,您可以通过它来验证模型中的组。
django-guardian
严重依赖于auth.User
模型。具体来说,它是基于auth.User
和auth.Group
模型的关系构建的。保留这种关系对guardian
- 至关重要,没有多少用户(自定义或默认)和auth.Group关系django-guardian将会BREAK。