odoo 屏蔽ir.rule的方法

发布时间 2023-11-03 21:44:32作者: CrossPython

开发中遇到一个需求是考勤记录普通用户只能看自己的考勤记录,管理员可有看所有人的考勤记录,这个需求使用两个规则记录就可以搞定了,但是在加班申请中需要展示对应日期的考勤记录,审批人也是普通用户无法看到他人的考勤记录,这个是时候就需要屏蔽规则记录了

追踪了下ir.rule的生效方法:
模型基类中有一个方法 _apply_ir_rules,只需要对这个方法改造一下即可,在我们不需要规则生效的页面中上下文加入一个标识符
然后再方法里对这个标识符进行判断,如果有直接返回就可以跳过记录规则了

最终解决方案

@api.model
def _apply_ir_rules(self, query, mode='read'):
      if self.env.context.get('rule_flag'):
            return
      return super()._apply_ir_rules(query,mode)

  

当然其实这个需求是可以增加一个考勤记录的可见范围字段,然后改写记录规则实现,但是偷懒不想在每个加班申请当中去查找对应考勤记录增加可见人员,而且还要涉及转审增加,比较麻烦。最终选择这个方案解决问题