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

Odoo 14中SUPERUSER_ID与访问组的作用及权限检查疑问

Odoo 14中以超级用户身份检查特定访问组的意义

我原本的认知是超级用户拥有/忽略所有访问组,但看到以下代码中用超级用户去检查特定访问组,想咨询这么做的意义是什么?

相关代码示例

stock/models/res_config_settings.py

def set_values(self):
    ...
    was_operations_showed = self.env['stock.picking.type'].with_user(SUPERUSER_ID)._default_show_operations()
    res = super(ResConfigSettings, self).set_values()
    ...    
    return res

addons/stock/models/stock_picking.py

def _default_show_operations(self):
    return self.user_has_groups('stock.group_production_lot,'
                                'stock.group_stock_multi_locations,'
                                'stock.group_tracking_lot')

解答

首先纠正一个认知:Odoo的超级用户(SUPERUSER_ID)默认确实拥有所有权限,但**user_has_groups方法的逻辑并非完全依赖当前用户的实际权限,而是会同步检查系统层面这些组的启用状态**——因为有些组是和模块功能绑定的,只有当对应模块安装且组被启用时,调用这个方法才会返回True。

回到这段代码的场景:

  • _default_show_operations方法的作用是判断是否显示库存操作界面,它的返回值依赖三个库存相关功能组的状态。
  • 用with_user(SUPERUSER_ID)调用这个方法,核心目的是绕过当前登录用户的权限限制,直接读取系统中这些组的全局启用状态,而不是检查当前操作的用户是否持有这些组权限。
  • 如果不用超级用户,假设打开配置页面的普通用户没有这些组的权限,user_has_groups会返回False,导致代码错误地记录操作界面的显示状态,影响后续配置逻辑的准确性。

简单来说,这里用超级用户的本质是:获取系统层面的功能组启用状态,而非单个用户的权限持有情况,确保配置逻辑不受当前用户权限的干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 04:40:33