django - 限制用户访问相关模型

时间:2018-02-24 18:12:05

标签: django permissions

在我的项目中,我有一个Bot模型,它具有User模型的外键。每个用户都应该管理自己的Bot个实例,所以在我的BotListViewBotUpdateViewBotCreateView等等。我检查用户是否拥有对象/对象列表,这是公平的不重要的。

但是,Bot有很多依赖模型:ContentBlock s,Campaign s,Subscriber s,Question等等,所有这些都是有FK到Bot。这些依赖模型又具有它们自己的依赖模型,例如, CampaignCampaignDelivery个,SubscriberTicket等等。对于所有这些我需要访问控制。

所以在我的所有观点中,我必须通过三到四个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项目中的常见情况,那么这样的访问控制的最佳实践是什么?

0 个答案:

没有答案