第4章:安全 - 简要介绍¶
在 上一章 中,我们创建了第一个用于存储业务数据的表。在像 Odoo 这样的业务应用程序中,首先要考虑的问题之一是谁1 可以访问这些数据。Odoo 提供了一种安全机制,允许特定用户组访问数据。
安全性的主题在更多细节上有所涵盖 限制数据访问。本章旨在涵盖我们新模块所需的最低限度。
数据文件(CSV)¶
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"
...
id
is an external identifier. It can be used to refer to the record (without knowing its in-database identifier).country_id:id
refers to the country by using its external identifier.name
is the name of the state.code
is the code of the state.
这三个字段在 res.country.state
模型中 定义。
按照惯例,导入数据的文件位于模块的 data
文件夹中。当数据与安全相关时,它位于 security
文件夹中。当数据与视图和操作相关时(我们稍后会介绍),它位于 views
文件夹中。此外,所有这些文件都必须在 __manifest__.py
文件的 data
列表中声明。我们的示例文件在 基础模块的清单中定义。
还要注意的是,数据文件的内容只有在安装或更新模块时才会被加载。
警告
数据文件按照它们在 __manifest__.py
文件中的顺序依次加载。这意味着如果数据 A
引用了数据 B
,你必须确保 B
在 A
之前加载。
为什么这对于安全很重要?因为模型的所有安全配置都是通过数据文件加载的,正如我们将在下一节中看到的那样。
访问权限¶
参考: 与此主题相关的文档可以在 访问权限 中找到。
注解
目标:在本节结束时,以下警告不应再出现:
WARNING rd-demo odoo.modules.loading: The models ['estate.property'] have no access rules...
当模型上没有定义访问权限时,Odoo 会确定没有用户可以访问数据。甚至在日志中通知此信息:
WARNING rd-demo odoo.modules.loading: The models ['estate.property'] have no access rules in module estate, consider adding some, like:
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
访问权限被定义为模型 ir.model.access
的记录。每个访问权限与一个模型、一个组(或全局访问时没有组)和一组权限相关联:创建、读取、写入和删除2。这些访问权限通常在名为 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
is an external identifier.name
是ir.model.access
的名称。model_id/id
指的是适用于访问权限的模型。引用模型的标准方式是model_<model_name>
,其中<model_name>
是模型的_name
,将.
替换为_
。看起来很繁琐?确实如此…group_id/id
refers to the group which the access right applies to.perm_read,perm_write,perm_create,perm_unlink
: read, write, create and unlink permissions
Exercise
添加访问权限。
在适当的文件夹中创建 ir.model.access.csv
文件,并在 __manifest__.py
文件中定义它。
给组 base.group_user
赋予读取、写入、创建和删除权限。
提示:日志中的警告信息已经给出了大部分的解决方案 ;-)
重启服务器,警告信息应该已经消失了!
现在是时候终于 与用户界面交互 了!