Odoo 13 记录规则:对特定记录的写访问
Odoo 13 record rules: Write access on specific records
我正在研究扩展 Odoo 出勤的模块。我的目标是只使满足条件的记录可编辑,而其他记录保持只读状态。
我已经创建了一个附加字段 user_editable
来模拟未来的情况,但是这不起作用。所有显示的条目都设置为只读。
我错过了什么?
这些是我根据现有规则改编的记录规则。
<odoo>
<record id="mymodule_attendance_rule_create" model="ir.rule">
<field name="name">user: modify own attendance only</field>
<field name="model_id" ref="hr_attendance.model_hr_attendance"/>
<field name="domain_force">[('employee_id.user_id','=',user.id)]</field>
<field name="perm_read" eval="0"/>
<field name="perm_write" eval="0"/>
<field name="perm_create" eval="1"/>
<field name="perm_unlink" eval="0"/>
<field name="groups" eval="[(4,ref('base.group_user'))]"/>
</record>
<record id="mymodule_attendance_rule_change" model="ir.rule">
<field name="name">user: modify only last three workdays' attendance</field>
<field name="model_id" ref="hr_attendance.model_hr_attendance"/>
<field name="domain_force">[
('user_editable','=',True),
('employee_id.user_id','=',user.id)
]</field>
<field name="perm_read" eval="0"/>
<field name="perm_write" eval="1"/>
<field name="perm_create" eval="0"/>
<field name="perm_unlink" eval="1"/>
<field name="groups" eval="[(4,ref('base.group_user'))]"/>
</record>
</odoo>
据我所知,当用户试图编辑一个条目时,应该评估第二个,但是,在安装模块后,在前端无法编辑。
这是我的额外字段的定义:
class HrAttendance(models.Model):
_inherit = "hr.attendance"
user_editable = fields.Boolean(string='User editable',
store=True,
compute='_compute_user_editable')
_compute_user_editable
目前只设置“真”。
谢谢!
我找到了问题的根源。我继承的视图对于 Officer 和 Administrator 组的成员是可编辑的。这是通过设置条件实现的:
<record id="view_attendance_tree_inherit" model="ir.ui.view">
<field name="name">hr.attendance.tree.inherit</field>
<field name="model">hr.attendance</field>
<field name="inherit_id" ref="hr_attendance.view_attendance_tree"/>
<!-- the line hier was causing the problem -->
<field name="groups_id" eval="[(4, ref('hr_attendance.group_hr_attendance_user'))]"/>
<field name="arch" type="xml">
<tree position="attributes">
<attribute name="edit">1</attribute>
<attribute name="editable">bottom</attribute>
</tree>
</field>
</record>
group_hr_attendance_user
其实就是Officer组。所以手动考勤组的任何人都不能编辑记录。此条件检查禁止它。
所以我的方法是创建一个自己的视图(基本上是这个视图的修改副本)并进行适当的组检查。 group_hr_attendance
为人工考勤组。为了让它发挥作用,我添加了
<field name="view_ids" eval="[(5, 0, 0),
(0, 0, {'view_mode': 'tree', 'view_id': ref('mymodule.view_attendance_tree')}),
(0, 0, {'view_mode': 'kanban', 'view_id': ref('hr_attendance.view_hr_attendance_kanban')}),
(0, 0, {'view_mode': 'form', 'view_id': ref('mymodule.attendance_view_form')})]"/>
到我的菜单操作。我也为 attendance_view_form
制作了一份副本,因为它与树视图具有相同的组限制。
我正在研究扩展 Odoo 出勤的模块。我的目标是只使满足条件的记录可编辑,而其他记录保持只读状态。
我已经创建了一个附加字段 user_editable
来模拟未来的情况,但是这不起作用。所有显示的条目都设置为只读。
我错过了什么?
这些是我根据现有规则改编的记录规则。
<odoo>
<record id="mymodule_attendance_rule_create" model="ir.rule">
<field name="name">user: modify own attendance only</field>
<field name="model_id" ref="hr_attendance.model_hr_attendance"/>
<field name="domain_force">[('employee_id.user_id','=',user.id)]</field>
<field name="perm_read" eval="0"/>
<field name="perm_write" eval="0"/>
<field name="perm_create" eval="1"/>
<field name="perm_unlink" eval="0"/>
<field name="groups" eval="[(4,ref('base.group_user'))]"/>
</record>
<record id="mymodule_attendance_rule_change" model="ir.rule">
<field name="name">user: modify only last three workdays' attendance</field>
<field name="model_id" ref="hr_attendance.model_hr_attendance"/>
<field name="domain_force">[
('user_editable','=',True),
('employee_id.user_id','=',user.id)
]</field>
<field name="perm_read" eval="0"/>
<field name="perm_write" eval="1"/>
<field name="perm_create" eval="0"/>
<field name="perm_unlink" eval="1"/>
<field name="groups" eval="[(4,ref('base.group_user'))]"/>
</record>
</odoo>
据我所知,当用户试图编辑一个条目时,应该评估第二个,但是,在安装模块后,在前端无法编辑。
这是我的额外字段的定义:
class HrAttendance(models.Model):
_inherit = "hr.attendance"
user_editable = fields.Boolean(string='User editable',
store=True,
compute='_compute_user_editable')
_compute_user_editable
目前只设置“真”。
谢谢!
我找到了问题的根源。我继承的视图对于 Officer 和 Administrator 组的成员是可编辑的。这是通过设置条件实现的:
<record id="view_attendance_tree_inherit" model="ir.ui.view">
<field name="name">hr.attendance.tree.inherit</field>
<field name="model">hr.attendance</field>
<field name="inherit_id" ref="hr_attendance.view_attendance_tree"/>
<!-- the line hier was causing the problem -->
<field name="groups_id" eval="[(4, ref('hr_attendance.group_hr_attendance_user'))]"/>
<field name="arch" type="xml">
<tree position="attributes">
<attribute name="edit">1</attribute>
<attribute name="editable">bottom</attribute>
</tree>
</field>
</record>
group_hr_attendance_user
其实就是Officer组。所以手动考勤组的任何人都不能编辑记录。此条件检查禁止它。
所以我的方法是创建一个自己的视图(基本上是这个视图的修改副本)并进行适当的组检查。 group_hr_attendance
为人工考勤组。为了让它发挥作用,我添加了
<field name="view_ids" eval="[(5, 0, 0),
(0, 0, {'view_mode': 'tree', 'view_id': ref('mymodule.view_attendance_tree')}),
(0, 0, {'view_mode': 'kanban', 'view_id': ref('hr_attendance.view_hr_attendance_kanban')}),
(0, 0, {'view_mode': 'form', 'view_id': ref('mymodule.attendance_view_form')})]"/>
到我的菜单操作。我也为 attendance_view_form
制作了一份副本,因为它与树视图具有相同的组限制。