Django,对象级权限和计算字段

时间:2018-09-09 01:44:56

标签: python django permissions calculated-field django-guardian

我一直在互联网上寻找答案,但是我的Google-fu不能正常工作。

我需要具有对象级权限和基于用户有权访问的字段的计算字段。我必须使用Django。我可以导入插件。

例如,考虑以下用例:

  

一家企业想提供一个库存跟踪系统,用于   销售文员和经理。

     

系统跟踪每个销售员本月开始的库存量   他们当月售出了多少,以及他们有多少库存   有剩余的(计算字段:(start_inventory-sold_inventory =   currentInventory))。

     

销售员只能查看以下商品的开始,销售和当前库存:   自己。

     

经理可以查看商品的所有开始,销售和当前库存   他们管理的销售文员。

现在,开始库存和已出售库存都记录在模型中了-仅将开始库存和已出售库存使用django-guardian get_objects_for_user()之类的东西似乎很简单...但是对于当前库存呢?

我的第一个想法是在model.py中定义一个函数或一个具有该函数的管理器,以返回模型+计算出的当前库存字段。

但是,因为该方法在model.py中...所以我不能使用get_objects_for_user()来确保仅对用户有权访问的字段进行计算。那是因为模型无法访问请求...如果没有某种黑客攻击,并可能引入耦合?

出于谨慎的考虑,我回头看看view.py。我一直在使用通用列表视图,并且我正在重写get_queryset()方法,以便可以插入自己的自定义行为。然后,我可以使用get_objects_for_user(),然后在视图中添加计算字段...伙计,这似乎也不正确。

以这种方式进行操作将意味着我的计算出的要素是与视图而非数据耦合的。如果必须在多个视图中显示此数据,则每次都必须覆盖它...

这就是我被困住的地方。我找不到或不知道如何优雅地实现此行为。

我的意思是,我的想法的根源是根据用户的权限更改视图的上下文。即每个人都共享视图,但是context_object / queryset会根据用户的权限而变化。

我不知道这是不是很聪明,或者这种方法是否妨碍了我寻找解决方案的能力-但是用橡胶引诱并谷歌搜索它一直没有用。

嗯,让我在可接受的解决方案中添加一些最终约束:

  

可以在模型中存储其他数据/计算字段   被认为是不可行的(假设系统可以扩展到   需要许多计算字段)。

谢谢您的帮助!

0 个答案:

没有答案