在上一章中,我们创建了第一个表 用于存储业务数据。在像Odoo这样的业务应用程序中,第一个问题 要考虑的是谁1 可以访问数据。Odoo提供了一种安全机制来允许访问 添加到特定用户组的数据。
限制对数据的访问中更详细地介绍了安全性主题。本章旨在 以涵盖我们新模块所需的最低要求。
Odoo是一个高度数据驱动的系统。尽管行为是使用 Python 代码自定义的,但 模块的值在于它在加载时设置的数据中。加载数据的一种方法是通过 CSV 文件。一个示例是在安装模块时加载的国家/地区列表。base
"id","country_id:id","name","code"
state_au_1,au,"Australian Capital Territory","ACT"
state_au_2,au,"New South Wales","NSW"
state_au_3,au,"Northern Territory","NT"
state_au_4,au,"Queensland","QLD"
…
这三个字段在模型中定义。res.country.state
class CountryState(models.Model):
_description = "Country state"
_name = 'res.country.state'
_order = 'code'
country_id = fields.Many2one('res.country', string='Country', required=True)
name = fields.Char(string='State Name', required=True,
help='Administrative divisions of a country. E.g. Fed. State, Departement, Canton')
code = fields.Char(string='State Code', help='The state code.', required=True)
按照惯例,导入数据的文件位于模块的data文件夹中。当数据与安全性相关时,它位于security文件夹中。当数据与视图和操作相关时(我们将在后面介绍),它位于views文件夹中。此外,所有这些文件都必须在__manifest__.py文件中的数据列表中声明。我们的示例文件在基模块的清单中定义。
__manifest__.py内容如下:
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
{
'name': 'Base',
'version': '1.3',
'category': 'Hidden',
'description': """
The kernel of Odoo, needed for all installation.
===================================================
""",
'depends': [],
'data': [
'data/res.country.state.csv',
'security/ir.model.access.csv',
],
'demo': [],
'test': [],
'installable': True,
'auto_install': True,
'post_init_hook': 'post_init',
}
还要注意,只有在安装或更新模块时才加载数据文件的内容。
警告
数据文件按照__manifest .py文件中的顺序依次加载。这意味着如果数据A引用数据B,您必须确保B在A之前被加载。
在国家状态的情况下,您将注意到国家列表在国家状态列表之前加载。这是因为states指的是国家。
访问权限被定义为模型ir.model.access的记录。每个访问权限都与一个模型、一个组(或者全局访问没有组)和一组权限相关联:创建、读、写和删除。这样的访问权限通常定义在一个名为ir.model.access.csv的CSV文件中。
以下是我们之前的一个例子:estate_property
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_estate_property_group_user,estate.property,model_estate_property,base.group_user,1,1,1,1
id是外部标识符。
name是ir.model.access的名称。
model_id:id 指访问权限适用的模型。引用模型的标准方法是model_<model_name>,其中<model_name>是模型的_name字段的值。
group_id:id 指访问权限适用的组。
perm_read,perm_write,perm_create,perm_unlink:读取、写入、创建和删除的权限
添加访问权限。
# data files always loaded at installation
'data': [
'security/ir.model.access.csv',
'views/estate_property_view.xml',
],