Odoo智能按钮权限配置:伙伴表单非客服用户访问异常处理
解决Odoo伙伴表单智能按钮权限问题
问题原因
非客服用户打开伙伴表单触发访问错误,是因为他们没有权限访问helpdesk.ticket模型相关的统计字段(helpdesk_ticket_count)或动作方法(action_view_helpdesk_tickets),但视图默认会加载所有字段,导致权限校验失败。
解决方案
通过权限组控制可见性,让智能按钮仅对客服用户可见,同时避免非授权用户加载敏感字段/方法:
1. 修改视图代码,添加权限组控制
给按钮和统计字段加上groups属性,绑定到Odoo客服模块的默认权限组:
<odoo> <data> <record id="helpdesk_ticket_smart_button" model="ir.ui.view"> <field name="name">partner.helpdesk.ticket.smart.buttons</field> <field name="model">res.partner</field> <field name="inherit_id" ref="base.view_partner_form" /> <field name="arch" type="xml"> <div name="button_box" position="inside"> <!-- 仅客服用户/管理员可见按钮 --> <button class="oe_stat_button" type="object" name="action_view_helpdesk_tickets" icon="fa-ticket" groups="helpdesk.group_helpdesk_user,helpdesk.group_helpdesk_manager" > <!-- 统计字段同样绑定权限组 --> <field string="Tickets" name="helpdesk_ticket_count" widget="statinfo" groups="helpdesk.group_helpdesk_user,helpdesk.group_helpdesk_manager" /> </button> </div> </field> </record> </data> </odoo>
2. 模型层补充权限控制
在res.partner模型的计算字段定义中,同样添加groups属性,确保非授权用户不会加载该字段:
from odoo import fields, models, _ from odoo.exceptions import AccessError class ResPartner(models.Model): _inherit = 'res.partner' helpdesk_ticket_count = fields.Integer( compute='_compute_helpdesk_ticket_count', # 绑定客服权限组 groups='helpdesk.group_helpdesk_user,helpdesk.group_helpdesk_manager' ) def _compute_helpdesk_ticket_count(self): for partner in self: partner.helpdesk_ticket_count = self.env['helpdesk.ticket'].search_count( [('partner_id', '=', partner.id)] ) def action_view_helpdesk_tickets(self): self.ensure_one() # 额外添加权限校验,防止绕过视图限制 if not self.env['helpdesk.ticket'].check_access_rights('read', raise_exception=False): raise AccessError(_("您没有访问客服工单的权限。")) return { 'name': _('客服工单'), 'type': 'ir.actions.act_window', 'res_model': 'helpdesk.ticket', 'view_mode': 'tree,form', 'domain': [('partner_id', '=', self.id)], 'context': {'default_partner_id': self.id} }
3. 权限组说明
helpdesk.group_helpdesk_user:普通客服用户组helpdesk.group_helpdesk_manager:客服管理员组
如果使用自定义的客服权限组,替换成对应的组外部ID即可。
效果
修改后:
- 非客服用户打开伙伴表单时,不会加载该智能按钮及统计字段,避免权限错误
- 仅拥有客服权限组的用户能看到并使用智能按钮,正常访问对应工单
内容的提问来源于stack exchange,提问作者xixo222
相关产品推荐
相关产品推荐

