如何在Odoo 10中对用户隐藏图表视图模式
在Odoo 10中对用户隐藏图表视图的解决方案
嘿,我来帮你搞定Odoo 10里给用户隐藏图表视图的问题,这里有几个靠谱的技术方案,你可以根据自己的需求选择:
方案1:通过权限组精准控制视图访问
这是最直接的原生方法,利用Odoo的权限组体系来限制图表视图的可见性:
- 先开启开发者模式,进入「设置 -> 技术 -> 视图 -> 视图」
- 在视图列表里筛选「视图类型」为「图表」,找到你要限制的模型对应的图表视图
- 打开该视图,切换到「访问权限」标签页:
- 如果想让只有特定组能看到,就移除现有组,添加目标权限组(比如管理员组或你自定义的组)
- 如果想隐藏给大部分用户,只保留极少数有权限的组即可
方案2:通过XML继承隐藏图表切换按钮
如果只是不想让用户看到切换到图表视图的入口(工具栏里的图表按钮),可以用视图继承来隐藏它:
创建一个自定义模块,在XML文件里添加以下代码(记得替换成你自己的模型和视图ID):
<odoo> <data> <!-- 继承目标模型的列表视图,替换成实际的视图ID --> <record id="inherit_sale_order_list" model="ir.ui.view"> <field name="name">sale.order.list.inherit</field> <field name="model">sale.order</field> <field name="inherit_id" ref="sale.view_order_tree"/> <field name="arch" type="xml"> <!-- 定位到图表按钮,设置不可见 --> <xpath expr="//button[@name='graph']" position="attributes"> <!-- 若要针对特定组,改成 groups="your_module.your_restricted_group" --> <attribute name="invisible">1</attribute> </xpath> </field> </record> </data> </odoo>
安装这个模块后,目标视图的工具栏里就不会再显示图表按钮,用户自然无法切换到图表视图。
方案3:通过Python代码实现更灵活的权限控制
如果需要根据用户的特定属性(比如部门、角色等)动态控制视图可见性,可以通过重写视图的权限检查逻辑来实现:
在自定义模块的Python文件里添加以下代码:
from odoo import models, api class IrUiView(models.Model): _inherit = 'ir.ui.view' @api.multi def check_access_rights(self, operation, raise_exception=True): # 先调用父类的权限检查逻辑 res = super(IrUiView, self).check_access_rights(operation, raise_exception=False) # 如果是读取操作,且当前视图是图表视图 if res and operation == 'read' and self.type == 'graph': # 这里写你的自定义判断逻辑,比如只允许管理员组访问 if not self.env.user.has_group('base.group_system'): res = False # 按照Odoo的规则返回结果,需要抛出异常时交给父类处理 return res if not raise_exception else super(IrUiView, self).check_access_rights(operation, raise_exception)
这个方法会让不符合条件的用户完全无法访问图表视图,从数据库层面就限制了权限。
注意事项
- 操作前记得备份数据,尤其是修改核心视图或代码时
- 确保开启开发者模式来获取准确的视图ID和模型信息
- 自定义模块要经过测试后再部署到生产环境
内容的提问来源于stack exchange,提问作者Dhouha Slaoui
相关产品推荐
相关产品推荐

