Odoo 为什么列表能看见,点进去却报权限错误:ACL 与记录规则域合并顺序
用户能在列表里看到记录,点进详情却报权限错,常见原因不是单纯“没给权限”,而是 ACL、全局规则、组规则和关联模型读取顺序叠在了一起。
TOPIC PICKS
用户能在列表里看到记录,点进详情却报权限错,常见原因不是单纯“没给权限”,而是 ACL、全局规则、组规则和关联模型读取顺序叠在了一起。
可以顺着继续读的相邻方向
related 字段很方便,但很多人对它的默认权限语义理解并不完整。本文从 fields.py 默认值、测试模型与 read_group 测试讲清 related_sudo 为什么会影响展示、搜索与分组边界。
解释 Odoo 数据导入的前后端链路:上传、映射、校验、创建/更新记录,以及为什么导入失败通常不是“模型写不进去”。
结合 auth_totp_mail 与 auth_timeout 源码,讲清 Odoo 邮箱验证码如何用 login_date 派生密钥、小时窗口验证、发送/校验双限流,以及在会话重认证中如何和 password / TOTP 协作。
`ir.rule` 的计算域是缓存过的,而缓存键里最关键的上下文之一就是 `allowed_company_ids`。这就是为什么切换公司后,权限结果会变。
很多开发者把 Odoo 权限理解成“两层门”:先看 ACL,再看 record rule。但从 ir_rule.py 的 _compute_domain 和 models.py 的 _check_access 看,系统实际做的是“先判模型权限,再把全局规则、组规则、继承模型规则合成一个 domain,最后对真实记录集做过滤和报错”。
很多人理解记录规则时只记住一句话:ir.rule 会给 search 自动加 domain。这个说法不算错,但远远不够。到了新版本源码里,访问检查已经不再是“前面搜出来就算能操作”,而是模型权限先过一层、记录规则再过一层,最后才得到真正允许的记录集。本文结合 orm/models.py 把这条边界讲透。