安全-簡介
前一章中我們已經創建了第一個打算用于存盤業務資料的表,在odoo這樣的一個商業應用中,第一個考慮的問題就是誰(Odoo 用戶(或者組用戶))可以訪問資料,odoo為指定用戶組用戶提供了一個安全的資料訪問機制,
更多關于安全主題的詳細資訊可以查看 Advanced B: ACL and Record Rules,本章目標是覆寫我們新模塊的最小安全需求,
Data Files (CSV)
Odoo是一個高度資料驅動的系統,雖然通過Python代碼定制行為,但是模塊的部分值在加載時設定的資料中, 加載資料的方式之一是通過一個CSV檔案,比如在安裝base模塊時加載的country states串列
"id","country_id:id","name","code"
state_us_1,us,"Alabama","AL"
state_us_2,us,"Alaska","AK"
state_us_3,us,"Arizona","AZ"
state_us_4,us,"Arkansas","AR"
...
id為外部標識,可用于參考記錄(不需要知道在資料庫中的唯一標識),country_id:id通過使用外部標識指向國家.name州的名稱code州的代碼
在 res.country.state model中定義了這三個欄位
按約定,匯入資料的檔案存放在模塊的 data 目錄中,當資料和安全相關時,存放在 security 目錄中,當資料和視圖和action相關時,存放在 views 目錄中. 此外,所有這些檔案必須在 __manifest__.py中的data 串列中定義,
查看示例檔案
# -*- 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',
}
同時需要注意的是,當前資料檔案僅在模塊被安裝或者更新時才被加載,
注意:
按資料檔案在__manifest__.py 中的順序加載檔案資料,這意味著資料A 參考B, 則必須確保B放在A之前,
在country states的案例中, 你會發現country串列優先于country states串列被加載,這是因為country states 參考了country.
為什么這對于安全來說很重要,因為模塊的所有安全配置,都是通過資料檔案加載的,
訪問權限(Access Rights)
參考: 該主題相關檔案可以查看 Access Rights.
本節目標是解決類似以下告警:
WARNING rd-demo odoo.modules.loading: The model estate.property has no access rules...
當模型中沒有定義任何訪問權限時,odoo會認為沒有任何用戶可以訪問資料,并在日志中列印:
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的一個示例
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為外部標識nameir.model.access的名稱model_id/id代指需要應用訪問權限的model,標準格式為model_<model_name>,其中,<model_name>為模塊中_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權限
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
access_estate_model,access_estate_model,model_estate_property,base.group_user,1,1,1,1
修改__manifest__.py檔案(本例為odoo14/custom/estate/__manifest__.py )
#!/usr/bin/env python
# -*- coding:utf-8 -*-
{
'name': 'estate',
'depends': ['base'],
'data':['security/ir.model.access.csv']
}
重啟odoo服務,查看日志是否還存在告警,
作者:授客
微信/QQ:1033553122
全國軟體測驗QQ交流群:7156436
Git地址:https://gitee.com/ishouke
友情提示:限于時間倉促,文中可能存在錯誤,歡迎指正、評論!
作者五行缺錢,如果覺得文章對您有幫助,請掃描下邊的二維碼打賞作者,金額隨意,您的支持將是我繼續創作的源動力,打賞后如有任何疑問,請聯系我!!!
微信打賞
支付寶打賞 全國軟體測驗交流QQ群
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/548105.html
標籤:Python
