You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:19:17