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

Odoo11如何防止用户通过开发者工具修改o_invisible_modifier越权访问

Odoo11 员工表单前端隐藏可绕过的安全修复方案

你现在采用的前端隐藏+屏蔽开发者工具的方案没有任何实际安全防护能力:o_invisible_modifier只是前端加的样式类,用户不仅能通过元素检查删掉这个类看内容,甚至可以直接抓RPC接口响应、绕过页面直接调用模型读取方法拿全量数据,靠jQuery拦截快捷键根本挡不住这类操作。

真正的安全控制必须做在后端,前端的隐藏、展示逻辑只负责交互体验,绝对不能把敏感数据返回给无权限的用户后再在前端藏起来。你现有架构下不用重构全局记录规则,按下面的方案改就能彻底堵死漏洞:

具体实现步骤

  • 后端接口层做数据过滤(核心)
    继承hr.employee模型,重写所有涉及字段值返回的读方法(read、search_read、read_group),逻辑非常明确:
    1. 先判断当前登录用户,如果是系统管理员、HR管理员这类有全量员工数据权限的用户,直接返回原始数据不做处理
    2. 对普通员工用户,遍历返回的记录集,只要不是当前用户关联的员工档案,除了id、name这类允许公开的字段,其余所有字段全部置空后再返回给前端,从根源上杜绝敏感数据下发
      参考实现代码(放到自定义模块的模型层即可):
    from odoo import models, api
    
    class HrEmployee(models.Model):
        _inherit = 'hr.employee'
    
        def _filter_employee_sensitive_fields(self, records):
            # 有全量权限的用户直接返回
            if self.env.user._is_admin() or self.env.user.has_group('hr.group_hr_manager'):
                return records
            allow_fields = {'id', 'name', 'display_name', '__last_update'}
            current_emp_id = self.env.user.employee_id.id
            for res in records:
                if res.get('id') != current_emp_id:
                    for key in list(res.keys()):
                        if key not in allow_fields:
                            res[key] = False
            return records
    
        @api.model
        def read(self, fields=None, load='_classic_read'):
            res = super().read(fields=fields, load=load)
            return self._filter_employee_sensitive_fields(res)
    
        @api.model
        def search_read(self, domain=None, fields=None, offset=0, limit=None, order=None):
            res = super().search_read(domain=domain, fields=fields, offset=offset, limit=limit, order=order)
            return self._filter_employee_sensitive_fields(res)
    
  • 前端层逻辑保留优化
    你之前写的根据权限显示notebook页面、隐藏字段的逻辑可以正常保留,作为正常的交互体验优化即可,不需要删掉。这时候就算有用户删掉DOM上的隐藏类,因为接口根本没返回真实的敏感数据,页面上也只会显示空值,不会泄露信息。
  • 移除无效的前端拦截代码
    把之前写的屏蔽开发者工具快捷键、禁用右键之类的jQuery代码全部删掉,这类代码不仅防不住真正的绕过操作,还会干扰正常的系统调试,甚至容易和Odoo原生前端逻辑冲突引发页面报错,没有任何保留价值。

方案优势

  • 改动量极小,不需要调整现有系统的权限架构,不需要配置复杂的全局记录规则,适配你当前的系统限制
  • 从数据源头做权限校验,不管用户用什么前端绕过手段,都拿不到无权限的敏感数据,彻底解决安全隐患
  • 完全兼容Odoo原生逻辑,后续升级、新增字段只需要维护允许公开的字段列表即可,维护成本很低
  • 普通用户的使用体验和之前完全一致,不会有交互上的变化

内容的提问来源于stack exchange,提问作者Pawan Kumar Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:48:33