Row-level访问规则

来自Odoo大V社-odoo中文开发手册
跳转至: 导航搜索

我们可以在技术菜单中找到和访问控制列表在一起的记录规则菜单。

记录规则的定义模型是ir.rule。像往常一样,我们需要提供一个独特的名称。我们还需要操作符和规则过滤器组成的模型以达到访问限制。在Odoo中,规则过滤器通常是多个元组组成的列表。

通常情况下,规则适用于某些特定的访问组。在我们的例子中,我们将它应用于员工组。如果它没有访问组,这种特殊情况,被认为是全局 ( global字段将自动设置为 True)。全局规则是不同的,因为他们实施了限制,不会被非全局规则重写。

添加记录规则,我们应该创建security/todo_access_rules.xml文件并添加下面的内容︰

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    
        <record id="todo_task_user_rule" model="ir.rule">
            <field name="name">ToDo Tasks only for owner</field>
            <field name="model_id" ref="model_todo_task"/>
            <field name="domain_force">[('create_uid','=',user.id)]</field>
            <field name="groups" eval="[(4,ref('base.group_user'))]"/>
        </record>
    
</odoo>
  • 注意

小心noupdate ="1"属性。这意味着此数据在模块的升级时将不会更新。这就使它能够进行定制,因为后面模块的升级不会破坏用户进行的更改。但请注意,在开发的时候也会这样,所以在开发的时候你可以设置noupdate ="0" ,直到你对你的数据文件满意为止。

在groups字段,你还会发现一个特殊的表达式。它是一个一对多的关系字段,他们有特殊的操作语法。在这种情况下, (4,x) 元组指要追加 x 记录,这里 的x 是关联的员工组,用base.group_user标识的。一对多特殊的语法将在章 4模块数据 中更详细的介绍。

和前面一样,加载模块之前,我们必须将该文件添加到__manifest__.py文件中︰

'data': [
    'security/ir.model.access.csv',
    'security/todo_access_rules.xml',
    'todo_view.xml',
    'todo_menu.xml',
],

如果我们做对了所有步骤,现在我们运行测试模块,他们应该是通过的。

上一节:添加访问控制安全
下一节:更好的模块描述