gpt4 book ai didi

python - 如何透明地在 Django 应用程序中强制执行域完整性?

转载 作者:太空宇宙 更新时间:2023-11-04 06:28:59 25 4
gpt4 key购买 nike

情况是这样的。我有一个有多个用户的应用程序,每个用户都有一个他们所属的组/公司。所有模型上都有一个 company 字段,这意味着在数据库中的每个表中都有一个相应的 company_id 列。我想透明地强制执行,当用户试图访问任何对象时,他们总是被限制在他们的“域”内的对象,例如他们的团体/公司。我可以遍历每个查询并添加一个显示 .filter(company=user.company) 的过滤器,但我希望有更好的方法可以在较低级别进行操作,因此它对任何人都是透明的编码更高级别的逻辑。

有没有人有这方面的经验和/或可以向我们指出如何处理这个问题的良好资源?我假设这是一个相当普遍的要求。

最佳答案

你可以这样做:

from django.db import models
from django.db.models.query import QuerySet

class DomainQuerySet(QuerySet):
def applicable(self, user=None):
if user is None:
return self
else:
return self.filter(company=user.company)

class DomainManager(models.Manager):
def get_query_set(self):
return DomainQuerySet(self.model)
def __getattr__(self, name):
return getattr(self.get_query_set(), name)

class MyUser(models.Model):
company = models.ForeignKey('Company')

objects = DomainManager()

MyUser.objects.applicable(user)

由于我们使用的是查询集,因此查询是可链接的,因此您还可以:

MyUser.objects.applicable().filter(**kwargs)

关于python - 如何透明地在 Django 应用程序中强制执行域完整性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5127811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com