如何解决如何在模型ir.actions.server odoo 12中赋予用户组XML?
我使用此xml代码在“操作”中添加了一个按钮,但我需要将该按钮限制为某些用户组,
<record id="specialist_no_show_action" model="ir.actions.server">
<field name="name">No Show </field>
<field name="type">ir.actions.server</field>
<field name="binding_model_id" ref="second_opinion.model_consultation"/>
<field name="model_id" ref="second_opinion.model_consultation"/>
<field name="state">code</field>
<field name="code">
action = model.update_no_show()
</field>
</record>
解决方法
ir.actions.actions
get_bindings方法将尝试检索绑定到给定模型的动作列表,并丢弃未授权的动作,然后读取动作定义。
该方法将使用groups_id字段来检查用户是否可能不执行操作。
groups_id
允许查看/使用当前报告的组的Many2many字段
因此,groups_id字段被添加到ir.actions.report
,以允许groups查看/使用当前报告
很遗憾,groups_id
字段中未实现ir.actions.server
幸运的是,get_bindings
方法是在ir.actions.actions
模型中实现的,该模型是两个模型ir.actions.report
和ir.actions.server
的基础模型,因此在服务器中使用相同的逻辑操作只需在groups_id
中添加一个ir.action.server
字段,并从XML定义中使用它来限制对某些组的访问。
使用groups_id
字段执行服务器操作:
-
继承服务器操作模型并添加
groups_id
字段:class IrActionsServer(models.Model): _inherit = 'ir.actions.server' groups_id = fields.Many2many('res.groups','res_groups_server_rel','uid','gid',string='Groups')
-
然后从XML设置
groups_id
字段值,下面的示例将使用special commands format将Administration/Access Rights
组添加到groups_id
字段:><field name='groups_id' eval="[(4,ref('base.group_erp_manager'))]"/>
我认为不可能限制它在操作菜单中的可见性,但是作为解决方法,您可以在服务器操作的code
中执行以下操作:
if not env.user.has_group('base.group_erp_manager'):
raise Warning("You do not have access to trigger this action")
将“ base.group_erp_manager”替换为用户组的XML ID。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。