Odoo 为什么列表能看见,点进去却报权限错误:ACL 与记录规则域合并顺序
用户能在列表里看到记录,点进详情却报权限错,常见原因不是单纯“没给权限”,而是 ACL、全局规则、组规则和关联模型读取顺序叠在了一起。
TOPIC PICKS
用户能在列表里看到记录,点进详情却报权限错,常见原因不是单纯“没给权限”,而是 ACL、全局规则、组规则和关联模型读取顺序叠在了一起。
可以顺着继续读的相邻方向
很多开发者把 `has_group()` 当成一个轻量 if 判断,但从 Odoo 19 的 `res_users.py` 和 `res_groups.py` 看,它背后其实连着 XMLID 解析、组定义缓存、隐含组展开,以及对“是否允许检查别人权限”的访问边界。本文讲清 `has_group()` 真正改变的是什么,以及为什么它常常把 bug 藏得更深。
很多人写 Odoo 定时任务时,只想着“把数据处理完”,却忽略了调度器本身的运行契约。基于 Odoo 19 的 `ir_cron.py` 源码,本文讲清 `_commit_progress()`、剩余时间、分批循环与部分完成状态,解释为什么一个健康的 cron 不是“尽量久地跑”,而是“持续可恢复地跑”。
从 Odoo 19 的 portal 与 sale portal 控制器源码出发,讲清门户列表页并不是“search 一把然后分页”这么简单。domain、pager、session history 与 access token 彼此有边界,自定义时最容易在这里做出越权或漏单问题。
从 Odoo 19 的 ORM 源码出发,讲清 flush_model、invalidate_model、modified 各自解决什么问题,以及为什么你一旦直接写 SQL,就必须主动把 ORM 世界和数据库世界重新对齐。
从 Odoo 19 源码出发,讲清一次访问为什么会先过 ACL、再过记录规则,以及 sudo 和 allowed_company_ids 为什么会让同一段代码在不同环境下表现完全不同。
从网站结账、销售确认到发票过账重复计算,讲清外部税为什么必须在多个业务节点重放同一份上下文。