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

使用Odoo 14外部API操作非活跃用户时出现Access Denied错误

Odoo 14 非活跃用户外部API访问受限问题说明

这是Odoo 14版本正式引入的默认安全机制改动,并非你遗漏了相关配置项。

不同版本的逻辑差异

Odoo 13及更早版本的外部API身份校验仅验证账号凭证、权限组两个维度,不会检查用户的active字段状态,只要凭证正确、权限匹配就能正常调用接口。
从Odoo 14开始,res.users模型的身份校验逻辑新增了active字段的前置校验:

  • 所有外部API请求的身份验证环节,会首先判断请求对应用户的active属性是否为True
  • 只要active为False,无论其他权限配置是否正确,都会直接返回Access Denied错误,拦截后续所有操作

适配方案

如果业务场景确实需要允许非活跃用户调用API,可以通过自定义模块修改校验逻辑,操作如下:

  • 新建自定义Odoo模块,依赖base核心模块
  • 继承res.users模型,重写_check_credentials方法,移除对active字段的校验限制
    参考代码:
from odoo import models, api
from odoo.exceptions import AccessDenied

class ResUsers(models.Model):
    _inherit = 'res.users'

    @api.model
    def _check_credentials(self, password, user_agent_env):
        # 绕过active限制查询对应用户
        target_user = self.sudo().search([('id', '=', self.env.uid)], limit=1, active_test=False)
        if not target_user:
            raise AccessDenied()
        # 调用原生校验逻辑时关闭active检测
        return super(ResUsers, target_user.with_context(active_test=False))._check_credentials(password, user_agent_env)

提示:修改默认安全规则存在权限泄露风险,非必要场景不建议调整,优先将需要调用API的账号设置为活跃状态即可。

内容的提问来源于stack exchange,提问作者Ahmad Sabeh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:36:08