odoo中的权限和规则
在Odoo中,安全性是通过一系列的权限和规则来管理的,这些权限和规则定义了用户可以看到什么数据和可以进行哪些操作。
这些安全规则主要是通过XML和CSV文件来配置的。
XML文件
XML文件通常用于定义记录规则(Record Rules)和访问控制列表(Access Control Lists, ACLs)。
-
记录规则(Record Rules):
- 记录规则限制了用户可以读取、创建、写入或删除哪些记录。
- 每个记录规则都有一个域,它是一个表达式,定义了哪些记录符合该规则。
- 记录规则可以是全局的,也可以针对特定的用户组。
- 记录规则在XML中通常通过
<record>
标签定义,其model
属性设置为ir.rule
。
-
访问控制列表(ACLs):
- ACLs定义了用户组对于模型(如客户、销售订单等)的操作权限,包括读取、创建、写入和删除。
- 权限通常分为四种:读(read)、写(write)、创建(create)和删除(unlink)。
- ACLs在XML中通常通过
<record>
标签定义,其model
属性设置为ir.model.access
。
XML文件中的安全性定义示例:
<!-- 定义一个用户组 --> <record id="group_custom_user" model="res.groups"> <field name="name">Custom User</field> </record> <!-- 给用户组定义访问权限 --> <record id="access_custom_model_user" model="ir.model.access"> <field name="name">custom.model.access.user</field> <field name="model_id" ref="model_custom_model"/> <field name="group_id" ref="group_custom_user"/> <field name="perm_read" eval="True"/> <field name="perm_write" eval="False"/> <field name="perm_create" eval="False"/> <field name="perm_unlink" eval="False"/> </record> <!-- 定义记录规则 --> <record id="custom_model_rule" model="ir.rule"> <field name="name">Custom Model Rule</field> <field name="model_id" ref="model_custom_model"/> <field name="domain_force">[('user_id', '=', user.id)]</field> <field name="groups" eval="[(4, ref('group_custom_user'))]"/> </record>
CSV文件
CSV文件主要用于初始化和更新模型的访问权限。这些文件更简单,通常包含模型的名称、权限和用户组的映射。
CSV文件中的列通常包括:
- id: 权限的唯一标识符。
- name: 权限的名字,通常与模型名称相关。
- model_id/id: 关联的模型的外部ID。
- group_id/id: 关联的用户组的外部ID。
- perm_read: 读权限(1为允许,0为不允许)。
- perm_write: 写权限。
- perm_create: 创建权限。
- perm_unlink: 删除权限。
CSV文件中的安全性定义示例:
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
access_custom_model_user,custom.model.access.user,model_custom_model,group_custom_user,1,0,0,0
在这个CSV文件示例中,model_custom_model
对应于自定义模型的外部ID,group_custom_user
对应于自定义用户组的外部ID。权限被设置为只读。
总结
在Odoo中,XML文件通常用于创建和维护复杂的安全规则,而CSV文件则用于初始化和更新访问权限。开发人员可以选择最适合项目需求的方式。通常,CSV文件在模块的数据文件夹中用于初始数据加载,而XML文件则用于视图、动作和安全规则的定义。在实际的开发过程中,这两种文件往往会同时作用。