代码之家  ›  专栏  ›  技术社区  ›  Ben G

Django用户“每个项目”组分配

  •  2
  • Ben G  · 技术社区  · 15 年前

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

    所以,我可以让项目A:用户“john”在组“manager”中,而项目“b”用户“john”在组“worker”中。

    如何使用django用户身份验证模型来实现这一点?

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

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

    更新:“worker”和“manager”只是我的应用程序定义的权限组(或“roles”)的两个示例。将来会有更多的。我可能还会有“管理”、“报告”等。

    2 回复  |  直到 15 年前
        1
  •  0
  •   Bernhard Vallant    15 年前

    如果您真的需要组中的这些信息,我认为最好的解决方案是将必要的模型进行子类化,并使您自己的auth应用程序/auth后端脱离这个范围!

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

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

    最肮脏的方法可能是使用猴子补丁(添加到_类)为组添加一个foreignkey,但我想这只是建议如果你没有找到另一种下降方式来做它,并且不知何故是你的最后手段,但不是第一选择!

        2
  •  0
  •   Steve Jalim    15 年前

    如果您可以在用户模型中不使用它,并且可以将其作为关联的用户配置文件模型,那么类似这样的情况如何:

    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")