我正在尝试创建一个用户在“工作区”中共同工作的网站。工作区就像是一组用户的帐户。
每个工作区将有许多用户。有两个用户组:“超级用户”和“常规用户”。
用户可以是多个工作空间的成员。该用户永远不能属于同一工作空间中的两个用户组,但该用户可以是一个工作空间中的“超级用户”,而可以是另一个工作空间中的“常规用户”。
我正在尝试确定是否可以使用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
这是一种明智的方法吗,还是我可以利用现成的框架来实现相同的目的?
答案 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()
来获取工作区的所有用户。