第 4 章:安全性(Security)- 简介

上一章 中,我们创建了第一个用于存储业务数据的表(table)。在像 Odoo 这样的业务应用程序中,首先需要考虑的问题之一是谁(who)可以访问这些数据。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 是一个 external identifier 。它可以用来引用记录(而无需知道其数据库中的标识符)。

  • country_id:id 通过使用其 external identifier 来引用国家。

  • name 是省份的名称。

  • code 是省份的代码。

这三个字段在 res.country.state 模型中 定义

按照惯例,导入数据的文件位于模块的 data 文件夹中。如果数据与安全性相关,则位于 security 文件夹中;如果数据与视图和动作(view 和 action)相关(我们将在后面介绍),则位于 views 文件夹中。此外,所有这些文件都必须在 __manifest__.py 文件的 data 列表中声明。我们的示例文件 在 base 模块的清单文件中定义

另请注意,数据文件的内容仅在模块安装或更新时加载。

警告

数据文件会按照它们在 __manifest__.py 文件中的顺序依次加载。这意味着,如果数据 A 引用了数据 B,您必须确保 BA 之前加载。

以国家省份为例,您会注意到 国家列表 是在 国家省份列表 之前 加载的。这是因为省份引用了国家。

为什么这对安全性很重要?因为模型的所有安全配置都是通过数据文件加载的,我们将在下一节中看到这一点。

访问权限

参考:与此主题相关的文档可以在 访问权限 中找到。

注解

目标:在本节结束时,以下警告应不再出现:

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 的记录。每个访问权限都与一个模型、一个用户组(或全局访问时无组)以及一组权限相关联:创建(create)、读取(read)、写入(write)和删除(unlink)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 是一个:term:external identifier

  • nameir.model.access 的名称。

  • model_id/id 指的是该访问权限所应用的模型。引用模型的标准方式是 model_<model_name> ,其中 <model_name> 是模型的 _name ,并将其中的 . 替换为 _ 。看起来很繁琐?确实如此……

  • group_id/id 指的是该访问权限所应用的用户组。

  • perm_read, perm_write, perm_create, perm_unlink :读取、写入、创建和删除权限

Exercise

添加访问权限。

在适当的文件夹中创建 ir.model.access.csv 文件,并在 __manifest__.py 文件中定义它。

为组 base.group_user 授予读取、写入、创建和删除权限。

提示:日志中的警告消息已经提供了大部分解决方案 ;-)

重启服务器后,警告消息应该已经消失了!

现在是时候终于可以 与用户界面交互了

1

即哪个Odoo用户(或用户组)

‘unlink’ 等同于 ‘delete’ (删除)。