Django基于角色的权限因不同的项目而异

时间:2018-01-17 17:46:02

标签: django django-models

您好我正在使用Django来构建项目管理应用程序,因为我有100个用户& 50多个项目。 单个用户参与多个具有不同角色的项目。现在如何给出基于项目角色的权限??

例如。 让用户"阿诺德"正在研究" [项目-A作为经理,项目-B作为供应商,项目-C作为艺术家]", *作为经理,阿诺德将获得项目A的所有权限, *作为供应商,arnold将获得项目B中的只读权限, *作为艺术家,arnold将获得项目C中的读取,写入和更新权限,

现在告诉我如何设计如上所述的模型关系?

1 个答案:

答案 0 :(得分:1)

这是我如何接近它。

从django的标准用户对象开始(我总是将其用于我的用户,然后从那里抽象出来)。

然后我创建一个角色对象。角色的名称包括供应商,所有者,艺术家等。

然后我在User,Role和Project之间创建一个联结对象。

class Role(...):
    name = models.CharField(...)

class Project(...):
     ...

class ProjectParticipant(...):
     user = models.ForeignKey(User)
     role = models.ForeignKey(Role)
     project = models.ForeignKey(Project)

然后我可以在视图中创建自定义@user_passes_test权限规则,以检查用户是否与项目有适当的关系。我假设您有一个暴露项目的视图,然后在其中公开不同的ProjectParticipant角色。