Odoo v10技术咨询:sudo()与SUPERUSER_ID是什么?能否修改获取当前用户?
Odoo v10 中 sudo() 方法与 SUPERUSER_ID 相关问题解答
1. sudo() 方法与 SUPERUSER_ID 分别指什么?
- sudo() 方法:这是Odoo模型对象自带的上下文切换方法。平时操作数据库时,所有动作都是以当前登录用户的权限执行的——比如普通用户看不到的菜单、无权修改的数据,系统都会做限制。而调用
sudo()之后,后续的查询、创建、修改等操作就会切换到超级用户(管理员)的权限下运行,直接跳过当前用户的权限校验。你也可以给它传一个具体的用户ID,比如sudo(10),这样就会切换到ID为10的用户权限去执行操作。 - SUPERUSER_ID 变量:这是Odoo内置的常量,默认值是1,对应的就是系统里超级用户(管理员)账号的ID。这个账号拥有系统最高权限,不受任何权限规则约束,通常用来执行模块安装、系统配置初始化这类需要全局权限的核心操作。
2. 是否可以修改 sudo() 方法或 SUPERUSER_ID 变量,使其每次获取当前用户而非管理员?
首先非常不建议直接修改这两个核心内容——改核心代码会给后续系统升级、维护埋下巨大隐患,还可能导致权限逻辑混乱,引发各种奇怪的问题。
如果你的需求是让某些操作始终以当前用户权限执行,其实有更稳妥的方式:
- 如果你自己写代码,完全不需要调用
sudo(),默认就是当前用户的权限。如果是第三方模块里的代码用了sudo(),你可以在调用时显式传入当前用户ID,比如sudo(self.env.uid),这样就会切换回当前用户的权限(虽然这有点多此一举,但如果是要覆盖某些强制用sudo的场景可以这么做)。 - 至于修改
SUPERUSER_ID变量,绝对不推荐。很多系统核心逻辑都依赖这个常量指向超级用户,改了之后可能导致模块安装失败、权限管理失效等严重问题。
总结下来,与其修改核心方法或常量,不如通过合理调用sudo()(或不用它)来实现你的需求,这样既安全又不会破坏系统原有逻辑。
内容的提问来源于stack exchange,提问作者YamK
相关产品推荐
相关产品推荐

