在Django中为“工作区”设置权限的正确方法?

时间:2019-02-11 12:35:31

标签: django django-models

我正在尝试创建一个用户在“工作区”中共同工作的网站。工作区就像是一组用户的帐户。

每个工作区将有许多用户。有两个用户组:“超级用户”和“常规用户”。

用户可以是多个工作空间的成员。该用户永远不能属于同一工作空间中的两个用户组,但该用户可以是一个工作空间中的“超级用户”,而可以是另一个工作空间中的“常规用户”。

我正在尝试确定是否可以使用Django中的即用型权限框架创建这种类型的设置,或者最好的解决方案是创建自己的支持表?

我自己的解决方案是这样的数据模型:

#(assume default User model)

class Workspace(models.Model):
    workspace_name = models.CharField(max_length=100)

class WorkspaceUser(models.Model):
    user = models.ForeignKey(User)
    workspace = models.ForeignKey(Workspace)
    usertype = models.CharField(max_length=100) #for simplicity, would only have two options

这是一种明智的方法吗,还是我可以利用现成的框架来实现相同的目的?

1 个答案:

答案 0 :(得分:1)

否,内置权限框架仅用于模型级别-即“用户可以总体上修改工作区”,而不是“用户可以修改特定的工作区”。

您的解决方案看起来很明智。一种补充是使用WorkspaceUser作为通过表添加一个显式的多对多声明:

class Workspace(models.Model):
    workspace_name = models.CharField(max_length=100)
    users = models.ManyToManyField(User, through='WorkspaceUser')

这不会改变表结构,但是使您能够my_user.workspace_set.all()来获取用户的所有工作区,或者my_workspace.users.all()来获取工作区的所有用户。