在我的项目中,我有一个Bot
模型,它具有User
模型的外键。每个用户都应该管理自己的Bot
个实例,所以在我的BotListView
,BotUpdateView
,BotCreateView
等等。我检查用户是否拥有对象/对象列表,这是公平的不重要的。
但是,Bot
有很多依赖模型:ContentBlock
s,Campaign
s,Subscriber
s,Question
等等,所有这些都是有FK到Bot
。这些依赖模型又具有它们自己的依赖模型,例如, Campaign
有CampaignDelivery
个,Subscriber
有Ticket
等等。对于所有这些我需要访问控制。
所以在我的所有观点中,我必须通过三到四个FK关系来找到特定的Bot
来检查对象用户。它看起来像这样:
if delivery.campaign.bot.user == request.user
if answer.question.bot.user == request.user
if renewal.ticket.subscriber.bot.user == request user
...
你明白了。我需要一种比这更简单的方法。
我想到为我的每个模型分配一个FK到User
以简化所有者查找,但这比现在更难以管理。此外,将FK存储到数百万User
行中的CampaignDelivery
是一个巨大的开销。
还有一种方法可以在每个模型上定义owner()
方法,并让我的观点针对object.owner()
检查request.user
。这是我目前的解决方案,但它看起来很笨拙。
我认为这是大型Django项目中的常见情况,那么这样的访问控制的最佳实践是什么?