3

这是我的问题:我的站点有用户,可以创建项目并访问其他用户的项目。每个项目可以为用户分配不同的权限。

所以,我可以有项目 A:用户“约翰”在组“经理”中,项目“B”用户“约翰”在组“工人”中。

我如何使用 Django 用户身份验证模型来做到这一点?

从 SQL 的角度来看,我希望能够在“auth_user_groups”表的主键中添加“project_id”。

我认为个人资料在这里没有任何帮助。有什么建议吗?

更新:“worker”和“manager”只是我的应用程序定义的权限组(或“角色”)的两个示例。未来还会有更多。例如:我可能还会有“admin”、“reporting”等...

4

2 回答 2

0

如果您确实需要组中的这些信息,我认为最好的解决方案是对必要的模型进行子类化,并从中创建您自己的身份验证应用程序/身份验证后端!

我不知道是否有必要将项目与组相关联,您还可以创建一个与用户具有 1:1 关系的用户配置文件,并且与项目具有 am:n 关系,因此您可以将项目分配给用户,然后签入您的应用程序用户与哪些项目相关?

我想到的第三个解决方案是有一个模型,一个外键用于项目,一个外键用于组,这也可能对您有用,但可能没有很好的可用性!

最肮脏的方法可能是使用猴子补丁(add_to_class)将外键添加到组中,但我想这只有在您找不到另一种下降方式时才值得推荐,并且在某种程度上是您的最后手段,但不是首选!

于 2010-06-04T13:59:37.237 回答
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")
于 2010-06-04T14:11:46.863 回答