【问题标题】:Odoo 13 record rules: Write access on specific recordsOdoo 13 记录规则:特定记录的写入权限
【发布时间】:2021-01-18 14:43:05
【问题描述】:

我正在开发一个扩展 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 目前只设置“True”。

谢谢!

【问题讨论】:

    标签: python xml odoo odoo-13


    【解决方案1】:

    我找到了问题的根源。我从中继承的视图对于官员和管理员组的成员是可编辑的。这是通过设置条件来实现的:

        <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实际上是官员组。因此手动考勤组中的任何人都无法编辑记录。此条件检查禁止它。

    所以我的方法是通过适当的组检查创建一个自己的视图(基本上是这个视图的更改副本)。 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 制作了一个副本,因为它与树视图具有相同的组限制。

    【讨论】:

      猜你喜欢
      • 2017-08-22
      • 1970-01-01
      • 2020-12-06
      • 2018-02-12
      • 2016-08-07
      • 2020-01-31
      • 2017-04-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多