第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"
...
idis an external identifier. It can be used to refer to the record (without knowing its in-database identifier).country_id:idrefers to the country by using its external identifier.nameis the name of the state.codeis 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
idis an external identifier.name是ir.model.access的名称。model_id/id指的是适用于访问权限的模型。引用模型的标准方式是model_<model_name>,其中<model_name>是模型的_name,将.替换为_。看起来很繁琐?确实如此…group_id/idrefers 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 赋予读取、写入、创建和删除权限。
提示:日志中的警告信息已经给出了大部分的解决方案 ;-)
重启服务器,警告信息应该已经消失了!
现在是时候终于 与用户界面交互 了!