0

設定

私はdjango-guardianを使い始めたばかりで、すぐにいくつかの障害に遭遇しました。AbstractBaseUser クラスを拡張してカスタム ユーザーを使用しています。この例に従って、models.py と admin.py をセットアップしました。また、開発者ガイドの構成ガイドに従ってガーディアンをセットアップしました。


問題

django-guardianは、ユーザーに関連する権限を取得AttributeError: type object 'MyCustomUser' has no attribute 'groups'しようとするたびにエラーをスローします (MyCustomUser は私のカスタム ユーザー クラスです) 。ただし、上記のエラーをスローする呼び出し。guardian_userobjectpermissionget_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ます。具体的には、関係 beteenauth.Userauth.Groupモデルを使用してゼロから構築されました。この関係を保持することは非常に重要ですguardian-多対多のユーザー (カスタムまたはデフォルト) と auth.Group の関係がないと、django-guardian が壊れます。

于 2014-01-07T08:12:49.140 に答える