翼度科技»论坛 编程开发 python 查看内容

odoo 开发入门教程系列-安全-简介

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
安全-简介

前一章中我们已经创建了第一个打算用于存储业务数据的表。在odoo这样的一个商业应用中,第一个考虑的问题就是谁(Odoo 用户(或者组用户))可以访问数据。odoo为指定用户组用户提供了一个安全的数据访问机制。
更多关于安全主题的详细信息可以查看 Advanced B: ACL and Record Rules。本章目标是覆盖我们新模块的最小安全需求。
Data Files (CSV)

Odoo是一个高度数据驱动的系统。虽然通过Python代码定制行为,但是模块的部分值在加载时设置的数据中。 加载数据的方式之一是通过一个CSV文件,比如在安装base模块时加载的country states列表
  1. "id","country_id:id","name","code"
  2. state_us_1,us,"Alabama","AL"
  3. state_us_2,us,"Alaska","AK"
  4. state_us_3,us,"Arizona","AZ"
  5. state_us_4,us,"Arkansas","AR"
  6. ...
复制代码

  • id 为外部标识。可用于引用记录(不需要知道在数据库中的唯一标识)。
  • country_id:id  通过使用外部标识指向国家.
  • name 州的名称
  • code 州的代码
在 res.country.state model中定义了这三个字段
按约定,导入数据的文件存放在模块的 data 目录中。当数据和安全相关时,存放在 security 目录中,当数据和视图和action相关时,存放在 views 目录中. 此外,所有这些文件必须在 __manifest__.py中的data 列表中定义
查看示例文件
  1. # -*- coding: utf-8 -*-
  2. # Part of Odoo. See LICENSE file for full copyright and licensing details.
  3. {
  4.     'name': 'Base',
  5.     'version': '1.3',
  6.     'category': 'Hidden',
  7.     'description': """
  8. The kernel of Odoo, needed for all installation.
  9. ===================================================
  10. """,
  11.     'depends': [],
  12.     'data': [
  13.         'data/res.lang.csv',
  14.         'data/res_lang_data.xml',
  15.         'data/res_partner_data.xml',
  16.         'data/res_company_data.xml',
  17.         'data/res_users_data.xml',
  18.         'data/report_paperformat_data.xml',
  19.         'data/res_currency_data.xml',
  20.         'data/res_country_data.xml',
  21.         'data/ir_demo_data.xml',
  22.         'security/base_groups.xml',
  23.         'security/base_security.xml',
  24.         'views/base_menus.xml',
  25.         'views/decimal_precision_views.xml',
  26.         'views/res_config_views.xml',
  27.         'data/res.country.state.csv',
  28.         'views/ir_actions_views.xml',
  29.         'views/ir_config_parameter_views.xml',
  30.         'views/ir_cron_views.xml',
  31.         'views/ir_filters_views.xml',
  32.         'views/ir_mail_server_views.xml',
  33.         'views/ir_model_views.xml',
  34.         'views/ir_attachment_views.xml',
  35.         'views/ir_rule_views.xml',
  36.         'views/ir_sequence_views.xml',
  37.         'views/ir_translation_views.xml',
  38.         'views/ir_ui_menu_views.xml',
  39.         'views/ir_ui_view_views.xml',
  40.         'views/ir_default_views.xml',
  41.         'data/ir_cron_data.xml',
  42.         'report/ir_model_report.xml',
  43.         'report/ir_model_templates.xml',
  44.         'views/ir_logging_views.xml',
  45.         'views/ir_qweb_widget_templates.xml',
  46.         'views/ir_module_views.xml',
  47.         'data/ir_module_category_data.xml',
  48.         'data/ir_module_module.xml',
  49.         'report/ir_module_reports.xml',
  50.         'report/ir_module_report_templates.xml',
  51.         'wizard/base_module_update_views.xml',
  52.         'wizard/base_language_install_views.xml',
  53.         'wizard/base_import_language_views.xml',
  54.         'wizard/base_module_upgrade_views.xml',
  55.         'wizard/base_module_uninstall_views.xml',
  56.         'wizard/base_export_language_views.xml',
  57.         'wizard/base_update_translations_views.xml',
  58.         'wizard/base_partner_merge_views.xml',
  59.         'wizard/base_document_layout_views.xml',
  60.         'data/ir_actions_data.xml',
  61.         'data/ir_demo_failure_data.xml',
  62.         'views/res_company_views.xml',
  63.         'views/res_lang_views.xml',
  64.         'views/res_partner_views.xml',
  65.         'views/res_bank_views.xml',
  66.         'views/res_country_views.xml',
  67.         'views/res_currency_views.xml',
  68.         'views/res_users_views.xml',
  69.         'views/ir_property_views.xml',
  70.         'views/res_config_settings_views.xml',
  71.         'views/report_paperformat_views.xml',
  72.         'views/onboarding_views.xml',
  73.         'security/ir.model.access.csv',
  74.     ],
  75.     'demo': [
  76.         'data/res_company_demo.xml',
  77.         'data/res_users_demo.xml',
  78.         'data/res_partner_bank_demo.xml',
  79.         'data/res_currency_rate_demo.xml',
  80.         'data/res_bank_demo.xml',
  81.         'data/res_partner_demo.xml',
  82.         'data/res_partner_image_demo.xml',
  83.     ],
  84.     'test': [],
  85.     'installable': True,
  86.     'auto_install': True,
  87.     'post_init_hook': 'post_init',
  88. }
复制代码
同时需要注意的是,当前数据文件仅在模块被安装或者更新时才被加载。
注意:
按数据文件在__manifest__.py 中的顺序加载文件数据。这意味着数据A 引用B, 则必须确保B放在A之前。
在country states的案例中, 你会发现country列表优先于country states列表被加载。这是因为country states 引用了country.
为什么这对于安全来说很重要,因为模块的所有安全配置,都是通过数据文件加载的。
访问权限(Access Rights)

参考: 该主题相关文档可以查看 Access Rights.
本节目标是解决类似以下告警:
  1. WARNING rd-demo odoo.modules.loading: The model estate.property has no access rules...
复制代码
当模型中没有定义任何访问权限时,odoo会认为没有任何用户可以访问数据,并在日志中打印:
  1. 2022-12-14 09:01:38,994 32508 WARNING odoo odoo.modules.loading: The model estate.property has no access rules, consider adding one. E.g. access_estate_property,access_estate_property,model_estate_property,base.group_user,1,0,0,0
复制代码
访问权限被定义为ir.model.access 模型记录。每个访问权限关联一个model,一个group(针对全局访问,没有组) 和一系列权限:create, read, write 和unlink(等同于delete)。这些访问权限通常定义在一个名为ir.model.access.csv的CSV文件中。
之前 test.model的一个示例
  1. id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
  2. 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 替换.为_后的_name 的值
  • group_id/id 代指需应用访问权限的组。
  • perm_read,perm_write,perm_create,perm_unlink: 分别代表create, read, write 和unlink权限,1表示有访问权限,0-表示无权限
练习

添加访问权限
在合适的目录中创建 ir.model.access.csv 文件(本例为 odoo14/custom/estate/security/ir.model.access.csv ),并在 __manifest__.py 文件中进行定义。
给 base.group_user授予read, write, create 和unlink权限
  1. id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
  2. access_estate_model,access_estate_model,model_estate_property,base.group_user,1,1,1,1
复制代码
修改__manifest__.py文件(本例为odoo14/custom/estate/__manifest__.py )
  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. {
  4.     'name': 'estate',
  5.     'depends': ['base'],
  6.     'data':['security/ir.model.access.csv']
  7. }
复制代码
重启odoo服务,查看日志是否还存在告警。

来源:https://www.cnblogs.com/shouke/p/17253311.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具