簡體   English   中英

django-guardian自定義用戶權限

[英]django-guardian custom user permissions

設定

我剛剛開始與django-guardian一起工作,並且立即遇到了一些障礙。 我通過擴展AbstractBaseUser類來使用自定義用戶。 我按照示例設置了我的models.py和admin.py。 我還按照開發人員指南配置指南來設置監護人。


問題

django-guardian拋出AttributeError: type object 'MyCustomUser' has no attribute 'groups'每當我嘗試獲取與用戶有關的權限時, 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)

可能的解決方案

  1. 設置身份驗證后端可能存在問題。 我目前將其設置為:

    AUTHENTICATION_BACKENDS =(

     'django.contrib.auth.backends.ModelBackend', 'guardian.backends.ObjectPermissionBackend', 

  2. 也許實現自定義用戶=>更改/實現自定義組? 目前,我在admin.py中具有admin.site.unregister(Group),但是更改它無濟於事。

  3. 正如開發人員警告的那樣 ,監護人可能與自定義用戶不兼容?

根據此處的 django-guardian文檔。 Gaurdian嚴重依賴django用戶模型的過時方式。 但是,如果您擴展了AbstractUser模型,或者使用auth.Group定義了ManyToMany關系,則可以解決該問題。

django-guardian嚴重依賴auth.User模型。 具體來說,它是使用auth.Userauth.Group模型之間的關系auth.User auth.Group 對於guardian保持此關系至關重要- 沒有多對多用戶(自定義或默認)和auth.Group關系,django-guardian會崩潰。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM