作者:陈珍贵263483 | 来源:互联网 | 2023-02-02 23:15
有什么不同:
test = self.env['my.example'].sudo().create({'id':1, 'name': 'test'})
test = self.env['my.example'].create({'id':1, 'name': 'test'})
所有示例都有效,但使用时有什么优势sudo()
?
1> Naglis..:
sudo()
在调用之前调用(没有参数)create()
将返回具有更新环境且具有admin(超级用户)用户ID集的记录集.这意味着对记录集的进一步方法调用将使用admin用户,因此绕过访问权限/记录规则检查[ source ].sudo()
还有一个可选参数user
,它是res.users
将在环境中使用的user()的ID (SUPERUSER_ID
默认值).
不使用时sudo()
,如果调用方法的用户create
对my.example
模型没有权限,则调用create
将失败AccessError
.
由于访问权限/记录规则不适用于超级用户,因此sudo()
应谨慎使用.此外,它可能会产生一些不良影响,例如.在多公司环境,来自不同公司的混合记录,另外,重新获取由于缓存失效(见环境交换的模型参考).