### 记录规则 一个记录规则限制了给定模型的一个子集的访问权限。规则是一个模型的`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> ~~~