每个数据库对象的Django权限

xqkwcwgp  于 2023-10-21  发布在  Go
关注(0)|答案(1)|浏览(85)

我有一个关于Django权限模型的架构问题。
我有一个数据库模型,其中持有公司,每个公司可以有多个项目。用户应该只能看到他们被分配到的公司,只能看到他们被分配到的项目。
我现在很困惑,
1.我应该在公司和项目中有一个Many 2 Many关系,它拥有允许的用户,然后通过权限系统检查他们的访问权限?
1.或者为每个公司创建一个新的权限,将此权限添加到公司和/或项目中,然后给予用户这些权限?
我认为解决方案1。从长远来看,当查询一个用户应该看到的所有项目时,这会给我带来问题。但是解决方案2让我卡住了,因为模型中没有权限字段,所以我总是必须将字符串字段转换为权限,我将生成大量的权限。
也许我完全想太多了。对于每个数据库条目权限,最好的方法是什么?
感谢和问候

v6ylcynt

v6ylcynt1#

我认为解决方案1。从长远来看,当查询一个用户应该看到的所有项目时,这会给我带来问题。
我真的不知道怎么做。如果你使用Permission s,最终它将在相同的建模中结束,或者更糟:必须获取 * 所有 * 权限,以确定您是否可以访问单个权限。
一个**ManyToManyField**[Django-doc]是用一个junction table [wiki]实现的:一个表(至少)有两个ForeignKey s:一个到“源”模型,一个到“目标”模型。ForeignKey在数据库中通常具有 index a结构,以有效地过滤表。
这意味着,通常如果我们想过滤特定的用户id,我们可以很容易地获得我们想要的记录,而不必遍历整个junction表或Project表。
因此,我们可以将其实现为:

from django.conf import settings

class Project(models.Model):
    # …
    members = models.ManyToManyField(settings.AUTH_USER_MODEL)

并过滤:

Project.objects.filter(members=some_user)

其中 * some_user * 表示我们希望查看用户所属的Project的用户。

相关问题