如何实现用户创建默认草稿记录且无法查看草稿状态记录?
解决Odoo草稿记录权限配置问题
让我们一步步拆解你的需求,修正现有规则的问题,实现你想要的权限逻辑:
需求回顾
- 用户创建的
shipping_cash记录默认处于**draft(草稿)**状态,但创建者自己无法查看这条草稿记录 - 仅指定组(比如
shipping_group_manager)可以查看草稿状态的记录,其他用户看不到任何草稿
现有规则的问题
你当前配置的规则给shipping_group_manager组设置了[('state','!=','draft')],这会导致管理员组也看不到草稿记录,完全和你的需求相反。而且没有处理"创建者看不到自己草稿"的核心逻辑。
完整解决方案
1. 确保记录默认处于Draft状态
首先在shipping_cash模型的state字段定义中添加默认值,让新创建的记录自动设为草稿:
from odoo import models, fields class ShippingCash(models.Model): _name = 'shipping.cash' _description = 'Shipping Cash' state = fields.Selection([ ('draft', 'Draft'), ('confirmed', 'Confirmed'), # 其他状态选项根据你的业务需求添加 ], string='Status', default='draft') # 其他字段定义...
2. 配置普通用户权限规则(看不到任何草稿)
创建一个规则,让所有普通用户(排除管理员组)只能查看非草稿状态的记录,这样创建者自己也看不到自己的草稿:
<record model="ir.rule" id="shipping_cash_user_rule"> <field name="name">Shipping Cash - Regular User Access (No Drafts)</field> <field name="model_id" ref="model_shipping_cash"/> <!-- 应用到所有普通用户组 --> <field name="groups" eval="[(4, ref('base.group_user'))]"/> <!-- 排除管理员组,避免规则冲突 --> <field name="exclude_from_groups" eval="[(4, ref('custom_shipping.shipping_group_manager'))]"/> <!-- 仅显示非草稿记录 --> <field name="domain_force">[('state', '!=', 'draft')]</field> <field name="perm_read" eval="True"/> <field name="perm_write" eval="True"/> <field name="perm_create" eval="True"/> <field name="perm_unlink" eval="True"/> </record>
3. 配置管理员组权限规则(可查看所有记录)
给shipping_group_manager组设置全量访问权限,允许他们查看包括草稿在内的所有记录:
<record model="ir.rule" id="shipping_cash_manager_rule"> <field name="name">Shipping Cash - Manager Full Access</field> <field name="model_id" ref="model_shipping_cash"/> <!-- 绑定到管理员组 --> <field name="groups" eval="[(4, ref('custom_shipping.shipping_group_manager'))]"/> <!-- 允许查看所有记录 --> <field name="domain_force">[(1, '=', 1)]</field> <field name="perm_read" eval="True"/> <field name="perm_write" eval="True"/> <field name="perm_create" eval="True"/> <field name="perm_unlink" eval="True"/> <!-- 设置更高优先级,确保规则优先生效 --> <field name="sequence" eval="10"/> </record>
测试验证
- 用普通用户账号创建一条
shipping_cash记录,刷新后你会发现这条草稿记录不会出现在列表中 - 切换到
shipping_group_manager组的用户账号,可以看到所有草稿和非草稿记录 - 确认普通用户只能看到已确认(或其他非草稿状态)的记录
内容的提问来源于stack exchange,提问作者Salem Hassan
相关产品推荐
相关产品推荐

