在前一章中,我们创建了第一个表,用于存储业务数据。在Odoo这样的业务应用程序中,首先要考虑的问题之一是谁可以访问数据。Odoo提供了一种安全机制,允许特定用户组访问数据。
高级主题B:ACL和记录规则更详细地介绍了安全性主题。本章旨在介绍新模块所需的最低要求。
数据文件(CSV)
Odoo是一个高度数据驱动的系统。虽然行为是使用Python代码自定义的,但模块的部分值存在于加载时设置的数据中。加载数据的一种方法是通过CSV文件。一个例子是在安装基本模块时加载的国家/地区列表。
"id","country_id:id","name","code"
state_us_1,us,"Alabama","AL"
state_us_2,us,"Alaska","AK"
state_us_3,us,"Arizona","AZ"
state_us_4,us,"Arkansas","AR"
...
- id:是一个外部标识符。它可以用来引用记录(不知道其在数据库中的标识符)。
- country_id:id:指使用其外部标识符的国家。
- name:是州的名称。
- code:是州的代码。
这三个字段定义在res.country.state
模型中。
按照惯例,导入数据的文件位于模块的data
文件夹中。当数据与安全性相关时,它位于security
文件夹中。当数据与视图和操作相关时(后面介绍),它位于views
文件夹中。此外,所有这些文件都必须在__manifest__.py
文件内的data
列表中声明。我们的示例文件在base
模块的__manifest__.py
文件中定义。
还要注意,数据文件的内容仅在安装或更新模块时加载。
警告
数据文件按照__manifest __.py
文件中排列的顺序加载。这意味着,如果数据A依赖于数据B,则必须确保A在B之前加载。
为什么这一切对安全很重要?因为模型的所有安全配置都是通过数据文件加载的,我们将在下一节中看到。
访问权限
参考:与本主题相关的文档可在访问权限中找到。
备注
目标:在本节末尾,以下警告不应再出现:WARNING rd-demo odoo.modules.loading: The model estate.property has no access rules...
当模型上没有定义访问权限时,Odoo将确保没有用户可以访问数据。日志中甚至会通知:
WARNING rd-demo odoo.modules.loading: The model estate.property has no access rules, consider adding one. E.g. access_estate_property,access_estate_property,model_estate_property,base.group_user,1,0,0,0
访问权限定义为ir.model.access
模型中的记录。每个访问权限都与模型、组(或无全局访问组)和一组权限相关联:创建、读取、写入和取消链接。此类访问权限通常在名为ir.model.access.csv
的CSV文件中定义。
下面是我们之前的test.model
的示例:
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
access_test_model,access_test_model,model_test_model,base.group_user,1,0,0,0
-
id:是一个外部标识符。
-
name:是
ir.model.access
的名称。 -
model_id/id:指的是访问权适用的模型。参考模型的标准方式是模型名称,其中模型名称是模型的名称,由替换为。看起来很麻烦?确实是…
-
group_id/id:指的是访问权限适用的组。我们将在专门讨论安全性的高级主题中介绍组的概念。
-
perm_read,perm_write,perm_create,perm_unlink:读取、写入、创建和取消链接权限
练习
添加访问权限。
在适当的目录创建ir.model.access.csv
文件,并在__manifest __.py
文件中定义它。
将读、写、创建和取消链接权限授予base.group_user
。
提示:日志中的警告消息提供了大部分解决方案;
重新启动服务器,警告消息应该已经消失!
现在是时候与UI进行最终交互了!