Odoo继承res.users模型后遇AccessError权限问题求助
分析 & 解决Odoo中res.users继承后的AccessError问题
嘿,我之前在扩展Odoo用户模型时也踩过类似的权限坑,来帮你拆解一下这个问题~
错误原因拆解
你遇到的AccessError(针对res.users的read操作),大概率是以下几种情况导致的:
- 自定义权限覆盖了默认权限:你的模块里的
ir.model.access.csv可能定义了针对res.users的权限记录,但配置错误——比如把perm_read设为0,或者指定的用户组不包含当前登录用户,导致用户连自己的用户记录都读不了。 - 字段权限限制:如果你给新增的
allowed_pricelists字段设置了groups属性(比如指定只有特定组能访问),但当前登录用户不在这个组里,也会触发读取权限错误。 - 记录规则(ir.rule)冲突:如果你的模块添加了针对
res.users的记录规则,或者修改了默认规则,导致规则逻辑限制了用户读取自身记录的权限。
具体解决办法
1. 检查并修正ir.model.access.csv配置
首先确保你的权限文件里有一条正确的res.users权限记录,给普通用户组(比如base.group_user)赋予读取权限。示例配置如下:
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_res_users_allowed_pricelists,Access res.users with allowed pricelists,model_res_users,base.group_user,1,1,0,0
model_id:id必须是model_res_users(对应res.users模型的内置ID)group_id:id根据你的需求选择,普通用户用base.group_user即可perm_read一定要设为1,确保用户能读取用户记录
2. 检查自定义字段的权限设置
如果你在继承res.users时定义allowed_pricelists字段时加了groups参数,比如:
allowed_pricelists = fields.Many2many('product.pricelist', string="Allowed Pricelists", groups="your_module.your_custom_group")
要确保当前登录用户属于your_module.your_custom_group这个组。如果不需要字段级权限限制,可以去掉groups参数,让字段继承模型的默认权限。
3. 验证记录规则(ir.rule)
进入Odoo后台的「设置」→「技术」→「安全」→「记录规则」,找到res.users相关的规则:
- 确保默认的「User: See own user」规则是启用状态,这条规则允许用户读取自己的记录
- 检查你是否添加了自定义规则,规则的域(domain)是否正确,避免误限制了用户的读取范围
4. 升级模块并测试
修改完配置后,记得升级你的模块,让权限设置生效。先使用管理员账号确认配置正常,再切换到目标普通用户测试是否还会出现权限错误。
内容的提问来源于stack exchange,提问作者Sofiane Mdj
相关产品推荐
相关产品推荐

