Odoo V14记录规则限制Chatter留言问题求助
Odoo V14:解决Chatter留言被记录规则阻止的问题
问题分析
你当前的记录规则限制了group_tg_data_prd_report组的用户仅能在tg_quart记录处于draft状态时执行写入操作,但Chatter留言需要更新记录的消息关联字段(如message_ids),非draft状态下的写入权限被规则拦截,导致无法留言。
同时原记录规则的perm_read=False设置存在逻辑矛盾:用户需要先读取记录才能执行写入或留言操作,该规则会阻止用户查看draft状态的记录,需先修正。
解决方案
我们需要分两步处理:确保用户能查看所有状态的记录,同时允许用户在非draft状态下仅能执行留言操作(限制修改其他字段)。
1. 修正记录规则的读取权限
添加一条记录规则,允许目标组用户读取所有状态的tg_quart记录:
<record id="exploitation_rule_read_all_tg_quart" model="ir.rule"> <field name="name">允许读取所有状态的tg_quart记录</field> <field name="model_id" ref="model_tg_quart"/> <field name="domain_force">[()]</field> <field name="groups" eval="[(4, ref ('exploitation.group_tg_data_prd_report'))]"/> <field name="perm_read" eval="True"/> <field name="perm_write" eval="False"/> <field name="perm_create" eval="False"/> <field name="perm_unlink" eval="False"/> </record>
2. 允许非draft状态下的留言操作(限制其他字段修改)
保留原有的draft状态写入规则,新增一条允许非draft状态写入的规则,同时通过模型的write方法拦截非消息字段的修改:
2.1 添加非draft状态写入规则
<record id="exploitation_rule_write_tg_quart_message" model="ir.rule"> <field name="name">允许在非draft状态下添加留言</field> <field name="model_id" ref="model_tg_quart"/> <field name="domain_force">[('state', '!=', 'draft')]</field> <field name="groups" eval="[(4, ref ('exploitation.group_tg_data_prd_report'))]"/> <field name="perm_write" eval="True"/> <field name="perm_read" eval="False"/> <field name="perm_create" eval="False"/> <field name="perm_unlink" eval="False"/> </record>
2.2 重写模型的write方法限制字段修改
在tg_quart模型的Python文件中添加以下代码,拦截非消息字段的修改:
from odoo import models, fields, api, exceptions class TGQuart(models.Model): _inherit = 'tg_quart' # 或直接定义模型,根据你的现有代码调整 @api.multi def write(self, vals): target_group = self.env.ref('exploitation.group_tg_data_prd_report') if target_group in self.env.user.groups_id: for record in self: if record.state != 'draft': # 仅允许修改Chatter相关字段 allowed_fields = ['message_ids', 'last_message_id', 'message_unread', 'message_has_error', 'message_has_error_counter'] invalid_fields = [field for field in vals if field not in allowed_fields] if invalid_fields: raise exceptions.UserError("仅允许在非草稿状态下添加留言,无法修改其他字段。") return super(TGQuart, self).write(vals)
3. 验证效果
更新模块后,测试目标组用户:
- 可以查看所有状态的
tg_quart记录 - 仅能在
draft状态下修改业务字段 - 在非
draft状态下仅能在Chatter区域留言,无法修改其他字段
内容的提问来源于stack exchange,提问作者Ouassini
相关产品推荐
相关产品推荐

