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', ],
如果我们做对了所有步骤,现在我们运行测试模块,他们应该是通过的。
上一节:添加访问控制安全 下一节:更好的模块描述