巧用_filter_access_rule方法实现记录自动过滤

需求背景

我们先来假设一个场景,有一家叫做白日梦科技的公司,它有一个销售员叫云天河,无采购权限。它还有一个采购员叫韩菱纱。这个公司经过二次开发,将关联的采购订单号显示在了销售订单上面:

@api.depends("order_line.purchase_line_ids")
def _compute_purchase_ids(self):
    self.purchase_order_ids = [(6,0,self.order_line.purchase_line_ids.order_id.ids)]

purchase_order_ids = fields.Many2many("purchase.order",string="Purchase Orders",compute="_compute_purchase_ids",store=True)
<field name="purchase_order_ids" widget="many2many_tags"/>

有一天,由销售员云天河做的销售订单SO0004,并生成了两个采购订单PO0003和PO0004, PO0003由采购员韩菱纱负责,PO0004由管理员负责。

filter1

按系统原生逻辑,因为云天河没有采购权限,因此看不到任何采购订单。当他打开了关联了采购订单的销售订单SO0004时,系统会提示无权限访问。

这时,老板玄霄说,

云天河应该虽然没有采购权限,但他应该能够看到自己订单(SO0004)关联的采购订单

问,如何实现老板的需求?

使用compute_sudo属性赋权

因为老板允许云天河以关联订单的权限来查看采购订单,那么我们就可以临时给这个查看动作临时提权,从而达到查看的目的。即,我们在上面的计算字段添加compute_sudo属性,即可解决这个问题:

purchase_order_ids = fields.Many2many("purchase.order",string="Purchase Orders",compute="_compute_purchase_ids",compute_sudo=True)

results matching ""

    No results matching ""