这是我的问题:我的网站有用户,可以创建项目,并访问其他用户的项目。 每个项目都可以为用户分配不同的权限。
所以,我可以拥有项目A:用户“John”在组“manager”中,而Project“B”用户“John”在组“worker”中。
我如何使用Django用户身份验证模型来做到这一点?
从SQL角度来看,我想要的是能够在“auth_user_groups”表的主键中添加“project_id”。
我不认为个人资料在这方面有任何帮助。有什么建议?
更新:“worker”和“manager”只是我的应用程序定义的权限组(或“角色”)的两个示例。将来会有更多。例如:我可能还会有“管理员”,“报告”等......
答案 0 :(得分:0)
如果您真的需要组中的这些信息,我认为最好的解决方案是对必要的模型进行子类化,并使用自己的身份验证应用程序/身份验证后端!
我不知道是否有必要将项目与组相关联,您还可以创建与用户具有1:1关系的用户配置文件,并且对项目是am:n,因此您可以将项目分配给用户然后检查您的应用程序与用户相关的项目?
我想到的第三个解决方案是拥有一个模型,其中一个外键可以投射,一个可以分组,这可能对您有用,但可能没有良好的可用性!
最脏的方法可能是使用猴子补丁(add_to_class)将一个外键添加到组中,但我想这只是值得推荐的,如果你没有找到另一种下降方式来做它并且不知何故是你的最后手段,但不是第一选择!
答案 1 :(得分: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")