odoo16入门教程第五章 关于安全简单的介绍

第五章 关于安全简单的介绍

在前一章节中,我们创建了第一个table用来存储商业数据,在像Odoo这样的商业应用中,要考虑的第一个问题就谁来可以存取数据,Odoo提供了一种安全机制允许特定的用户组的的人来存取数据。

关于安全的细节在 Restrict access to data. 这一章只覆盖关于新模块的最小需要。

Data Files (CSV)

Odoo是一个高度数据驱动的系统。虽然可以通过python代码来定义逻辑,模块的部分数据在加载的时候就设置好了。

加载数据的一种方法就是通过CSV文件,一个例子是 list of country states 当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是一个外部标志符,可以通过它引用这条记录而不需要在数据库的ID
  • country_id:id 指向国家的外部ID
  • name 州的名字
  • code 州的简写

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

通常来说,一个数据文件的位置在模块的“data”目录中。 当数据跟安全有关,它将会放在“security”目录中,当数据跟视图(views)和动作(action)有关,它将被放在“views”目录中,另外,所有的这些文件必须在清单文件的data列表中被声明。 我们的例子是base模块的清单文件。

# -*- 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.lang.csv',
        'data/res_lang_data.xml',
        'data/res_partner_data.xml',
        'data/res_company_data.xml',
        'data/res_users_data.xml',
        'data/report_paperformat_data.xml',
        'data/res_currency_data.xml',
        'data/res_country_data.xml',
        'data/ir_demo_data.xml',
        'security/base_groups.xml',
        'security/base_security.xml',
        'views/base_menus.xml',
        'views/decimal_precision_views.xml',
        'views/res_config_views.xml',
        'data/res.country.state.csv',
        'views/ir_actions_views.xml',
        'views/ir_config_parameter_views.xml',
        'views/ir_cron_views.xml',
        'views/ir_filters_views.xml',
        'views/ir_mail_server_views.xml',
        'views/ir_model_views.xml',
        'views/ir_attachment_views.xml',
        'views/ir_rule_views.xml',
        'views/ir_sequence_views.xml',
        'views/ir_translation_views.xml',
        'views/ir_ui_menu_views.xml',
        'views/ir_ui_view_views.xml',
        'views/ir_default_views.xml',
        'data/ir_cron_data.xml',
        'report/ir_model_report.xml',
        'report/ir_model_templates.xml',
        'views/ir_logging_views.xml',
        'views/ir_qweb_widget_templates.xml',
        'views/ir_module_views.xml',
        'data/ir_module_category_data.xml',
        'data/ir_module_module.xml',
        'report/ir_module_reports.xml',
        'report/ir_module_report_templates.xml',
        'wizard/base_module_update_views.xml',
        'wizard/base_language_install_views.xml',
        'wizard/base_import_language_views.xml',
        'wizard/base_module_upgrade_views.xml',
        'wizard/base_module_uninstall_views.xml',
        'wizard/base_export_language_views.xml',
        'wizard/base_update_translations_views.xml',
        'wizard/base_partner_merge_views.xml',
        'wizard/base_document_layout_views.xml',
        'data/ir_actions_data.xml',
        'data/ir_demo_failure_data.xml',
        'views/res_company_views.xml',
        'views/res_lang_views.xml',
        'views/res_partner_views.xml',
        'views/res_bank_views.xml',
        'views/res_country_views.xml',
        'views/res_currency_views.xml',
        'views/res_users_views.xml',
        'views/ir_property_views.xml',
        'views/res_config_settings_views.xml',
        'views/report_paperformat_views.xml',
        'views/onboarding_views.xml',
        'security/ir.model.access.csv',
    ],
    'demo': [
        'data/res_company_demo.xml',
        'data/res_users_demo.xml',
        'data/res_partner_bank_demo.xml',
        'data/res_currency_rate_demo.xml',
        'data/res_bank_demo.xml',
        'data/res_partner_demo.xml',
        'data/res_partner_image_demo.xml',
    ],
    'test': [],
    'installable': True,
    'auto_install': True,
    'post_init_hook': 'post_init',
}

另外注意,数据文件只有在一个模块安装或者升级的时候加载。

警告:

数据文件是按照他们在清单文件中的顺序逐一加载,这意味着如果数据A依赖数据B,那么你必须要确保数据B在加载数据A之前就加载了。

在国家和州的例子中,你将注意到,国家数据在州数据前被加载,这是因为州数据引用了国家数据。

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

Access Rights

参考: 关于这个主题的文档在这里 Access Rights.

注意:

目标: 在这一小节的最后,下面的警告将不会再出现

WARNING rd-demo odoo.modules.loading: The models ['estate.property'] have no access rules...

当一个模块没有存取权限被定义,Odoo会认为没有用户可以存取数据,log中会出现下面的提醒:

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 and unlink。 这些访问权限通常被定义文件名叫ir.model.access.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 是以外部标识符
  • name 是ir.model.access`中的名字
  • model_id/id 指向对应的模型. 引用模型的标准方式是 model_<model_name>, where <model_name> 是模型的_name属性将其中的“.”替换成“__” ,看上去很麻烦码? 确实是:(
  • group_id/id 指向授予权限的用户组
  • perm_read,perm_write,perm_create,perm_unlink: 读,写,创建,删除权限。

练习:

增加存取权限

创建ir.model.access.csv 文件在合适的目录中并定义在清单文件中。

富裕读、写、新增,删除权限给base.group_user.

Tip: log中警告信息已经给了你解决方案了:-)

重启服务,警告信息将不会出现了。

现在是时候跟UI交互了。

总结一波:

odoo是一个高度数据驱动的系统

如果没有给一个表定义访问权限,那么控制台会报一个错误

2023-05-10 07:27:27,964 346507 WARNING odoo 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
estate.access_estate_property,access_estate_property,estate.model_estate_property,base.group_user,1,0,0,0 

权限会定义ir.model.access表中, 每条访问规则包含三个元素:

模型:

用户组:(也可能没有用户组,是整体的访问权限)

访问权限:perm_read,perm_write,perm_create,perm_unlink

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值