我有一个关于Django权限模型的架构问题。
我有一个数据库模型,其中持有公司,每个公司可以有多个项目。用户应该只能看到他们被分配到的公司,只能看到他们被分配到的项目。
我现在很困惑,
1.我应该在公司和项目中有一个Many 2 Many关系,它拥有允许的用户,然后通过权限系统检查他们的访问权限?
1.或者为每个公司创建一个新的权限,将此权限添加到公司和/或项目中,然后给予用户这些权限?
我认为解决方案1。从长远来看,当查询一个用户应该看到的所有项目时,这会给我带来问题。但是解决方案2让我卡住了,因为模型中没有权限字段,所以我总是必须将字符串字段转换为权限,我将生成大量的权限。
也许我完全想太多了。对于每个数据库条目权限,最好的方法是什么?
感谢和问候
1条答案
按热度按时间v6ylcynt1#
我认为解决方案1。从长远来看,当查询一个用户应该看到的所有项目时,这会给我带来问题。
我真的不知道怎么做。如果你使用
Permission
s,最终它将在相同的建模中结束,或者更糟:必须获取 * 所有 * 权限,以确定您是否可以访问单个权限。一个**
ManyToManyField
**[Django-doc]是用一个junction table [wiki]实现的:一个表(至少)有两个ForeignKey
s:一个到“源”模型,一个到“目标”模型。ForeignKey
在数据库中通常具有 index a结构,以有效地过滤表。这意味着,通常如果我们想过滤特定的用户id,我们可以很容易地获得我们想要的记录,而不必遍历整个junction表或
Project
表。因此,我们可以将其实现为:
并过滤:
其中 *
some_user
* 表示我们希望查看用户所属的Project
的用户。