設定
私はdjango-guardianを使い始めたばかりで、すぐにいくつかの障害に遭遇しました。AbstractBaseUser クラスを拡張してカスタム ユーザーを使用しています。この例に従って、models.py と admin.py をセットアップしました。また、開発者ガイドの構成ガイドに従ってガーディアンをセットアップしました。
問題
django-guardianは、ユーザーに関連する権限を取得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) がありますが、変更しても役に立ちません。
開発者が警告しているように、ガーディアンはカスタム ユーザーと互換性がない可能性があります。