odoo17开发教程(5):权限的简单介绍

在之前的文章中,我们创建了第一个用于存储业务数据的表。在 Odoo 这样的商业应用程序中,首先要考虑的问题之一是谁可以访问数据。Odoo 提供了一种安全机制,允许特定用户组访问数据。

本章旨在对权限有个最低要求对了解

数据文件(CSV)

Odoo 是一个高度数据驱动的系统。虽然行为是通过 Python 代码定制的,但模块的部分价值在于加载时设置的数据。加载数据的一种方式是通过 CSV 文件。其中一个例子就是在安装基础模块时加载的国家列表。

"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 使用外部标识符来指代国家。
  • name 是国家的名称。
  • code 是国家的代码。

这三个字段是定义中 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)

按照惯例,导入数据的文件位于模块的数据文件夹中。当数据与安全相关时,它位于安全文件夹中。如果数据与视图和操作有关(我们将在后面介绍),则会放在视图文件夹中。此外,所有这些文件都必须在 __manifest__.py 文件的数据列表中声明。我们的示例文件定义在基础模块的清单中。

所以我们的模块目录结构现在是这样的:

请注意,只有在安装或更新模块时才会加载数据文件的内容。

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

权限控制


当模型上没有定义访问权限时,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 模型的记录。每个访问权限都与一个模型、一个组(全局访问则无组)和一组权限相关联:创建、读取、写入和取消链接(unlink,"等同于 "删除)。这些访问权限通常定义在一个名为 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
  1. id: 权限记录的唯一标识符。这在模块的数据文件中用于引用和修改权限记录。在你的例子中,它是 access_test_model

  2. name: 权限的名称。这通常用于描述性文档和查找,没有技术上的影响。在这里,它也是 access_test_model

  3. model_id/id: 关联的模型的外键。这指定了权限规则将应用于哪个模型。格式通常为 model_<model_name>,在你的例子中是 model_test_model,这意味着权限将应用于 test_model 模型。

  4. group_id/id: 关联的用户组的外键。这指定了哪个用户组拥有这些权限。格式通常为 module_name.group_name,在你的例子中是 base.group_user,表示这些权限适用于“内置用户”组的成员。

  5. perm_read: 读权限。如果设置为 1(或 true),则指定用户组的成员可以读取该模型的记录。在你的例子中,它被设置为 1,意味着用户可以读取 test_model 的记录。

  6. perm_write: 写权限。如果设置为 1(或 true),则指定用户组的成员可以修改该模型的记录。在你的例子中,它被设置为 0(或 false),意味着用户不能修改 test_model 的记录。

  7. perm_create: 创建权限。如果设置为 1(或 true),则指定用户组的成员可以创建该模型的新记录。在你的例子中,它被设置为 0,意味着用户不能在 test_model 中创建新的记录。

  8. perm_unlink: 删除权限。如果设置为 1(或 true),则指定用户组的成员可以删除该模型的记录。在你的例子中,它被设置为 0,意味着用户不能删除 test_model 的记录。

总之,这条权限规则意味着属于“内置用户”组的用户可以查看 test_model 模型的记录,但不能对其进行修改、创建或删除操作。这种权限设置在实际应用中有助于限制用户对数据的操作,确保数据的完整性和安全性。

实践:给我们之前创建的estate_property模型创建权限

在estate/security/ir.model.access.csv文件里加入以下权限控制:

id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
access_estate_property,access_estate_property,model_estate_property,base.group_user,1,1,1,1

好的,重启容器:docker restart <container_id>

很棒!你已经学会了基础的权限控制。

ir开头,指的是Internal Resources内部资源,这个前缀用于标识核心模块和基础设施的一部分,涵盖了系统级的功能和配置,包括但不限于模型访问权限、数据模型(对象)、UI视图、工作流程、报告和技术特性等。

上一篇文章 odoo17开发教程(4):模块module和model中的字段类型_odoo17 model属性-CSDN博客

下一篇文章 odoo17开发教程(6):用户界面UI的交互-创建Action_odoo17开发文档-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值