Odoo 10生成XLSX报表时出现AccessDenied权限错误求助
解决方案:排查Odoo 10自定义XLSX报表的AccessDenied错误
从你的报错栈和代码来看,核心问题是用户权限校验不通过——Odoo在执行报表导出动作时,安全检查环节判定当前用户没有足够权限。咱们一步步来修复:
1. 给报表添加基础权限控制
Odoo的报表默认会校验用户是否拥有访问该报表的权限,你需要先在模块的security/ir.model.access.csv中添加报表的权限记录:
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_report_excel,access.report.excel,model_ir_actions_report_xml,base.group_user,1,0,0,0
这里base.group_user是授权给普通用户组,你可以根据实际需求替换成特定业务组;perm_read设为1表示允许读取报表权限。
2. 修正报表XML的权限关联
你的报表XML没指定groups属性,这会导致只有超级管理员能访问,普通用户直接触发权限错误。修改报表定义,添加允许访问的用户组:
<report id="action_report_excel" model="account.invoice" string="Export to XLSX" report_type="xlsx" name="module_name.report_name.xlsx" file="module_name.report_name.xlsx" attachment_use="False" groups="base.group_user" <!-- 新增这行,指定可访问的用户组 --> />
3. 调整向导中的sudo()使用逻辑
你在向导里用了self.env['report'].sudo().get_action(...),虽然sudo()会切换到超级管理员上下文,但如果报表本身没对普通用户开放权限,或者向导模型缺少权限,还是会出问题。更合理的做法是:
- 先确保自定义向导模型(如果有的话)已经配置了正确的权限
- 去掉不必要的
sudo(),优先通过权限配置开放访问,修改后的代码:
def check_report(self): data = {} return self.env['report'].get_action(self, 'module_name.report_name.xlsx', data=data)
4. 验证报表注册的有效性
你的Python代码中注册报表的语句:
CustomReportXlsx('report.module_name.report_name.xlsx', 'account.invoice')
要确保这段代码在模块加载时被执行——比如放在该类所在文件的末尾,或者在模块的__init__.py中导入该类。如果注册失败,Odoo找不到对应的报表处理类,也可能触发类似权限的错误提示。
5. 刷新权限与缓存
做完以上修改后,务必完成以下操作:
- 升级你的自定义模块
- 进入Odoo后台「设置 -> 技术 -> 缓存管理」清除系统缓存
- 重新登录用户,确保权限配置生效
额外排查点
如果还是报错,检查:
- 当前用户是否真的属于你指定的用户组(进入「设置 -> 用户」编辑用户,查看关联的组)
- 确认用户拥有
account.invoice模型的读权限(报表基于该模型,没有读权限也会触发连锁错误)
内容的提问来源于stack exchange,提问作者user3583681
相关产品推荐
相关产品推荐

