### 记录规则
一个记录规则限制了给定模型的一个子集的访问权限。规则是一个模型的`ir.rule`,是一个模型,一组数(many2many字段),权限的限制适用,和域。域指定记录访问权限的限制。
下面是一个规则的例子,该规则可以防止未处于状态的导致的删除 `cancel`. 注意该领域`组`必须遵循公约的方法[ ` write() `相同的价值](https://www.odoo.com/documentation/9.0/reference/orm.html#openerp.models.Model.write "openerp.models.Model.write") ORM的.
~~~ xml
<record id="delete_cancelled_only" model="ir.rule">
<field name="name">Only cancelled leads may be deleted</field>
<field name="model_id" ref="crm.model_crm_lead"/>
<field name="groups" eval="[(4, ref('base.group_sale_manager'))]"/>
<field name="perm_read" eval="0"/>
<field name="perm_write" eval="0"/>
<field name="perm_create" eval="0"/>
<field name="perm_unlink" eval="1" />
<field name="domain_force">[('state','=','cancel')]</field>
</record>
~~~
练习
记录规则
添加模型的过程和组”openacademy /经理”的记录规则,制约`写`和`断`访问课程的负责人。如果一个课程没有任何责任,所有的用户都必须能够修改它。
创建一个新的规则 `openacademy/security/security.xml`:
*openacademy/security/security.xml*
~~~ xml
<record id="group_manager" model="res.groups">
<field name="name">OpenAcademy / Manager</field>
</record>
<record id="only_responsible_can_modify" model="ir.rule">
<field name="name">Only Responsible can modify Course</field>
<field name="model_id" ref="model_openacademy_course"/>
<field name="groups" eval="[(4, ref('openacademy.group_manager'))]"/>
<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="domain_force">
['|', ('responsible_id','=',False),
('responsible_id','=',user.id)]
</field>
</record>
</data>
</openerp>
~~~