You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Odoo如何让计算字段继承依赖模型的权限?

实现res.partner计算字段权限继承account.move的方法

要让res.partner里的something计算字段继承account.move的权限,核心是把字段权限和account.move的权限体系绑定,下面是两种实用方案:

方案1:直接绑定account.move的权限组

Odoo字段支持通过groups参数指定能访问该字段的权限组,直接复用account.move对应的核心权限组即可。

首先确认account.move的关键权限组,通常是account.group_account_user(普通会计用户组)或account.group_account_manager(会计经理组),然后给字段加上这个参数:

class ResPartner(models.Model):
    _inherit = "res.partner"

    something = fields.Float(
        'Something', 
        compute="_compute_something",
        groups="account.group_account_user"  # 绑定account.move的权限组
    )

    def _compute_something(self):
        for record in self:
            moves = self.env['account.move'].search([('partner_id', '=', record.id)])
            record.something = sum(moves.mapped('amount_total'))  # 示例计算逻辑,可替换成你的代码

这样只有拥有account.move访问权限的用户,才能看到something字段,和account.move的权限保持同步。

方案2:在计算逻辑里主动校验权限

如果需要更细粒度的控制——比如用户能看到partner记录,但没有account.move权限就看不到该字段的计算值,可以在计算方法里主动检查权限:

from odoo.exceptions import AccessError

class ResPartner(models.Model):
    _inherit = "res.partner"

    something = fields.Float('Something', compute="_compute_something")

    def _compute_something(self):
        # 检查当前用户是否有account.move的读取权限
        if not self.env['account.move'].check_access_rights('read', raise_exception=False):
            # 无权限时给默认值,也可以抛出AccessError提示无权限
            for record in self:
                record.something = 0.0
            return
        
        # 有权限时执行原计算逻辑
        for record in self:
            moves = self.env['account.move'].search(...)  # 你的原查询代码
            # 补充你的计算逻辑

这种方式下,字段对所有用户可见,但没有account.move权限的用户只能看到默认值,更贴合“字段依赖account.move所以权限继承”的需求。

注意点

  • 方案1是从字段可见性层面控制,无权限用户看不到字段;方案2是字段可见但值被限制,根据业务场景选。
  • 不确定account.move的权限组时,可在Odoo后台「设置-用户与公司-权限组」里查看会计模块的权限配置。

内容的提问来源于stack exchange,提问作者David Côté-Tremblay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 09:40:29