2010-06-04 82 views
2

這是我的問題:我的網站有用戶,它可以創建項目,並訪問其他用戶的項目。 每個項目可以爲用戶分配不同的權限。因此,我可以有項目A:用戶「約翰」在組「經理」,和項目「B」用戶「約翰」在組「工人」組。Django用戶「每個項目」組分配

我該如何使用Django用戶認證模式來做到這一點?

從SQL的角度來看,我希望能夠在「auth_user_groups」表的主鍵中添加「project_id」。

我不認爲配置文件在這裏有任何幫助。有什麼建議?

更新:「worker」和「manager」只是我的應用程序定義的權限組(或「roles」)的兩個示例。未來會有更多。例如:我可能也會有「管理員」,「報告」等...

回答

0

如果你真的需要這些信息的組,我認爲最好的解決方案是子類的必要模型,並使自己的身份驗證應用程序/ auth後端出來!

我不知道是否有必要將項目與組關聯,您還可以創建一個與用戶1:1關係的用戶配置文件,並將:n分配給項目,以便您可以將項目分配給用戶,然後檢查您的應用程序與用戶有關的項目?

我想到的第三種解決方案是使用一個外鍵來投影和一個分組,這可能也適用於您,但可能沒有很好的可用性!

最骯髒的方式可能是使用猴子補丁(add_to_class)添加一個外鍵到組,但我想這隻能推薦,如果你沒有找到另一種血統方式來做到這一點,而且是某種程度上你最後的手段,但不是第一選擇!

+0

感謝您的評論。我會稍微等一下,看看有人有更好的解決方案,但我可能會去你的第一個解決方案(子類)... 我真的不需要在組中,只有用戶的權利取決於在項目上。你的第二個解決方案意味着複製Django已經使用的auth_group/permission模型(帶有userprofilepermission這樣的表),只是在「auth_group」表的主鍵中添加另一個鍵......我真的希望有一種擴展基本auth模型的下降方式除了複製/粘貼。 Django擁有如此有限的認證模式真的不可思議。 – 2010-06-07 09:13:23

0

如果你可以在你的用戶模式,不要生活,可以把它相關聯的用戶配置文件的模式,怎麼是這樣的:

from django.contrib.auth.models import User 
from foo.models import Project 

class UserProfile(models.Model): 

    auth_user = models.ForeignKey('User') 
    projects_where_manager = models.ManyToManyField('Project', 
                related_name="managers_for_project") 
    projects_where_worker = models.ManyToManyField('Project', 
                related_name="workers_for_project") 
+0

實際上「工人」和「經理」只是我用戶擁有的權利類型的兩個例子。我真的很想使用「auth_group/permission」模型,將組定義爲表中的數據而不是列。 – 2010-06-07 09:02:13