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

如何在Odoo中通过外部API限制用户仅访问指定模型权限?

如何限制API用户仅访问指定模型?

问题场景

我需要限制外部API用户的权限范围,让他们只能访问少数指定模型,无法访问其他所有模型。我执行了以下测试步骤:

  • 创建全新的空用户组(用户类型设为API),未添加任何访问权限或记录规则;
  • 将目标用户加入该组;
  • 将该用户从其他所有组(如"Internal User")中移除。

但测试发现,使用该用户登录并通过API调用模型时仍可正常执行,仿佛已获得全部所需权限。

更新:我使用以下Python代码发起API请求,能正常获取custom_method()的响应结果:

import xmlrpc.client

url = "你的Odoo实例地址"
db = "数据库名"
username = "API用户名"
password = "密码"

common = xmlrpc.client.ServerProxy('{}/xmlrpc/2/common'.format(url))

uid = common.authenticate(db, username, password, {})
if uid:
    print("authentication succeeded")

    models = xmlrpc.client.ServerProxy('{}/xmlrpc/2/object'.format(url))

    api_result = models.execute(db, uid, password, 'custom.object', 'custom_method', {'custom_info': {'test_key': 'test_value'}})

解决方案

针对这个问题,需要从权限机制的几个关键点入手排查和配置:

  1. 确认用户类型为「仅API」
    确保目标用户的「用户类型」设置为仅API(在用户表单的「访问权限」标签页),避免继承内部用户的默认权限。

  2. 为用户组添加明确的指定模型权限
    不要依赖空组的默认限制,主动配置权限:

    • 进入「设置」→「用户与公司」→「组」,找到目标API用户组;
    • 在「访问权限」标签下,仅勾选需要开放的模型及对应权限(如读/写/创建/删除,按需选择);
    • 确保该组未继承任何其他有权限的组,且其他模型的权限均未被勾选。
  3. 检查自定义方法的权限校验逻辑
    如果调用的是自定义模型的方法,需确保方法内部包含权限检查:
    标准模型方法会自动触发权限校验,但自定义方法(尤其是使用@api.model装饰的方法)可能需要手动添加校验,示例:

    from odoo import api, models
    
    class CustomObject(models.Model):
        _name = 'custom.object'
    
        @api.model
        def custom_method(self, custom_info):
            # 检查当前用户是否拥有该模型的读权限
            self.check_access_rights('read')
            # 若需限制记录范围,添加记录规则检查
            self.check_access_rule('read')
            # 后续业务逻辑代码
            return {"result": "success"}
    
  4. 配置记录规则(可选)
    如果需要进一步限制用户能访问的具体记录,可针对指定模型添加记录规则,并关联到目标API用户组,确保用户只能操作符合条件的记录。

  5. 清除权限缓存后重新测试
    权限缓存可能导致修改不立即生效,测试前可重启服务,或在「设置」中点击「清除缓存」。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 03:33:28