odoo17 | 数据文件和访问权限

2024-01-03 08:12:03

前言

在上一章中,我们创建了第一个表 用于存储业务数据。在像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是外部标识符。它可以用来引用记录 (不知道其数据库内标识符)。
  • 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)

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

__manifest__.py内容如下:

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.


{
    'name': 'Base',
    'version': '1.3',
    'category': 'Hidden',
    'description': """
The kernel of Odoo, needed for all installation.
===================================================
""",
    'depends': [],
    'data': [
        'data/res.country.state.csv',
        'security/ir.model.access.csv',
    ],
    'demo': [],
    'test': [],
    'installable': True,
    'auto_install': True,
    'post_init_hook': 'post_init',
}

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

警告

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

在国家状态的情况下,您将注意到国家列表在国家状态列表之前加载。这是因为states指的是国家。

访问权限

访问权限被定义为模型ir.model.access的记录。每个访问权限都与一个模型、一个组(或者全局访问没有组)和一组权限相关联:创建、读、写和删除。这样的访问权限通常定义在一个名为ir.model.access.csv的CSV文件中。

以下是我们之前的一个例子:estate_property

id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_estate_property_group_user,estate.property,model_estate_property,base.group_user,1,1,1,1
  • id是外部标识符。

  • name是ir.model.access的名称。

  • model_id:id 指访问权限适用的模型。引用模型的标准方法是model_<model_name>,其中<model_name>是模型的_name字段的值。

  • group_id:id 指访问权限适用的组。

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

锻炼

添加访问权限。

  • 在相应的文件夹中创建文件(一般是模块文件夹下的security的文件夹下,例如 estate/security/ir.model.access.csv),并在文件中定义它。
  • 修改清单文件__manifest__.py,在data中添加 ‘security/ir.model.access.csv’。
    # data files always loaded at installation
    'data': [
        'security/ir.model.access.csv',
        'views/estate_property_view.xml',
    ],
  • 向base.group_user用户组授予读取、写入、创建和删除。

文章来源:https://blog.csdn.net/weixin_40986713/article/details/135347866
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。