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
相关产品推荐
相关产品推荐

