odoo 的权限可以分为对模型,对记录,对字段,但是对字段的权限仅仅只能控制字段的只读,隐藏,必填,无法做到按权限组对字段设置不同的权限,原生没有快捷简单的方法实现,但其实是可以通过继承视图来曲线救国达到这一目的
比如现在我去设置一个字段只能只读
<record id="test_fun_view_form" model="ir.ui.view">
<field name="name">test.fun.view.form</field>
<field name="model">test.fun</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<field name="name" readonly="1"/>
</group>
</sheet>
</form>
</field>
</record>
此时name字段对所有人都是只读的,如果想要特定权限组的人可编辑,可以做个继承视图
<record id="test_fun_view_form_inherit" model="ir.ui.view">
<field name="name">test.fun.view.form.inherit</field>
<field name="model">test.fun</field>
<field name="inherit_id" ref="test_model.test_fun_view_form"/>
<field name="groups_id" eval="[(6, 0,[ref('base.group_system')])]"/>
<field name="arch" type="xml">
<xpath expr="sheet//field[@name='name']" position="attributes">
<attribute name="readonly">0</attribute>
</xpath>
</field>
</record>
重点就是对视图设置groups_id, groups_id没有值即是视图所有人可见,但是如果有设置那么只有groups_id指定的权限组可以看见这个视图,在继承视图里对字段的readonly属性改写,如果这这个继承视图可见的用户则会改写成功,name字段可编辑,如果没有这个继承视图权限的用户则只能看见默认的视图,name字段还是readonly
有了这个方法后就可以对同一个字段不同用户设置不同的权限,达到对字段权限的更精细控制
网友评论