簡體   English   中英

Django 擴展組的權限不適用於用戶

[英]Django Extended Group's Permissions not applied to users

所以我擴展了 Django 的Group模型來添加一個額外的字段,如下所示:

class MyModel(Group):

    extra_field = models.TextField(null=True, blank=True)

這樣做時,創建的每個MyModel實例MyModel創建了一個Group實例。 如果我使用user.groups.add(group)將用戶添加到生成的組中,則會按預期添加該組。

但是,來自 MyModel 組的權限似乎並沒有傳遞給用戶,即

執行user.get_all_permissions()get_group_permissions()甚至測試user.has_permission(mygroup_permission)什么都不返回。 僅顯示來自Group 實例(在擴展模型之前創建)的權限。

我需要做什么才能使自定義組的權限對用戶可見?

TIA

當您查看ModelBackend (默認的 django 身份驗證后端)時,您可以看到:

def _get_group_permissions(self, user_obj):
        user_groups_field = get_user_model()._meta.get_field('groups')
        user_groups_query = 'group__%s' % user_groups_field.related_query_name()
        return Permission.objects.filter(**{user_groups_query: user_obj})

很明顯,它試圖從代表用戶組的字段中確定權限,這里是groups 由於您的MyModel未綁定到 djangos 用戶模型,因此您不會以這種方式獲得任何權限。

您現在可以:

  1. 編寫自定義用戶模型並替換的關系
  2. 編寫自定義身份驗證后端
  3. 使用從 MyModel 到 Group 的一對一關系

在我看來,最簡單的方法是在一對一關系中使用新模型擴展 Group 模型。 通過這種方式,您可以進一步使用 djangos 身份驗證系統並獲得額外的數據。

暫無
暫無

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

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