Files
odoo_source/odoo/addons/base/security/ir.model.access.csv
T
ef00294e71 [IMP] core: store translated fields as JSONB columns
Translated fields no longer use the model ir.translation.  Instead they store
all their values as JSON, and store them into JSONB columns in the model's
table.  The field's column value is either NULL or a JSON dict mapping language
codes to text (the field's value in the corresponding language), and must
contain an entry for key 'en_US' (as it is used as a fallback for all other
languages).  Empty text is allowed in translation values, but not NULL.

Here are examples for a field with translate=True:

    NULL
    {"en_US": "Foo"}
    {"en_US": "Foo", "fr_FR": "Bar", "nl_NL": "Baz"}
    {"en_US": "Foo", "fr_FR": "", "nl_NL": "Baz"}

Like before, writing False to the field makes it NULL, i.e., False in all
languages.  However, writing "" to the field makes its value empty in the
current language, but does not discard the values in the other languages.

Here are examples for a field with translate=xml_translate:

    NULL
    {"en_US": "<div>Foo<p>Bar</p></div>", "fr_FR": "<div>Fou<p>Barre</p></div>"}

Change for callable(translate) fields: one can now write any value in any
language on such a field.  The new value will be adapted in all languages, based
on the mapping of terms between languages in the old values.  Basically the
structure of the value must remain the same in all languages, like before.

Reading a translated field is now both simpler and faster than the former
implementation.  We fetch the value of the field in the current language by
coalescing its value with the 'en_US' value of the field:

    SELECT id, COALESCE(name->>'fr_FR', name->>'en_US') AS name ...

The raw cache of the field contains either None or a dict which is conceptually
a subset of the JSON value in database (except for missing languages).  For the
sake of simplicity, most cache operations deal with the dict and return the text
value in the current language.

Trigram indexes have been adapted to the new storing strategy, and should enable
to search in any language.  Before this change, only the source value of the
field ('en_US') could be indexed.

Computed stored translated fields are not supported by the framework, because of
the complexity of the computation itself: the field would need to be computed in
all active languages.  We chose to not provide any hook to compute a field in
all languages at once, and the framework always invokes a compute method once to
recompute it.

Code translations are no longer stored into the database.  They become static,
and are extracted from the PO files when needed.  The worker simply uses a cache
with extracted code translations for performance.  This is reasonable, since
fr_FR code translations for all modules takes around 2MB of memory, and the
cache can be shared among all registries in the worker.  Changing code
translations requires to update the corresponding PO file and reloading the
worker(s).

Performance summary:
 (+) reading 'model' translated fields is faster
 (+) reading 'model_terms' translated fields is much faster (no need to inject
     translations into the source value)
 (+) searching translated fields with operator 'ilike' is much faster when the
     field is indexed with 'trigram'
 (+) updating translated fields requires less ORM flushing
 (-) importing translations from PO files is 2x slower

Some extra fixes:
 - make field 'name' of ir.actions.actions translated; because of the PG
   inheritance, this is necessary to make the column definition consistent in
   all models that inherit from ir.actions.actions.
 - add some backend API for the web/website client for editing translations
 - move methods get_field_string() to model ir.model.fields
 - move _load_module_terms to model ir.module.module
 - adapt tests in test_impex, test_new_api
 - because env.lang is injected into SQL queries, its returned value is
   now guaranteed to correspond to a valid active language or None
 - remove wizard to insert missing translations (no longer makes sense)

task-id: 2081307

Co-authored-by: Fabien Pinckaers <fp@openerp.com>
Co-authored-by: Raphael Collet <rco@odoo.com>
2022-09-15 22:37:50 +02:00

14 KiB

1idnamemodel_id:idgroup_id:idperm_readperm_writeperm_createperm_unlink
2access_decimal_precision_configdecimal.precision configurationmodel_decimal_precisiongroup_system1100
3access_ir_attachment_group_userir_attachment group_usermodel_ir_attachmentgroup_user1111
4access_ir_attachment_group_portal_publicir_attachment group_portal_publicmodel_ir_attachment0000
5access_ir_cron_group_cronir_cron group_cronmodel_ir_crongroup_system1111
6access_ir_cron_trigger_group_cronir_cron_trigger group_cronmodel_ir_cron_triggergroup_system1111
7access_ir_exports_group_systemir_exports group_systemmodel_ir_exportsbase.group_allow_export1111
8access_ir_exports_line_group_systemir_exports_line group_systemmodel_ir_exports_linebase.group_user1111
9access_ir_model_group_erp_managerir_model group_erp_managermodel_ir_modelgroup_erp_manager1111
10access_ir_model_constraint_group_erp_managerir_model_constraint group_erp_managermodel_ir_model_constraintgroup_erp_manager1111
11access_ir_model_relation_group_erp_managerir_model_relation group_erp_managermodel_ir_model_relationgroup_erp_manager1111
12access_ir_model_access_group_erp_managerir_model_access_group_erp_managermodel_ir_model_accessgroup_erp_manager1111
13access_ir_model_data_group_erp_managerir_model_data group_erp_managermodel_ir_model_datagroup_erp_manager1111
14access_ir_model_fields_group_erp_managerir_model_fields group_erp_managermodel_ir_model_fieldsgroup_erp_manager1111
15access_ir_model_fields_selection_group_erp_managerir_model_fields_selection group_erp_managermodel_ir_model_fields_selectiongroup_erp_manager1111
16access_ir_model_userir_model_allmodel_ir_modelbase.group_user0000
17access_ir_model_data_userir_model_data usermodel_ir_model_database.group_user0000
18access_ir_model_fields_userir_model_fields allmodel_ir_model_fieldsbase.group_user0000
19access_ir_model_fields_selection_userir_model_fields_selection allmodel_ir_model_fields_selectionbase.group_user0000
20access_ir_module_category_group_userir_module_category group_usermodel_ir_module_categorygroup_erp_manager1000
21access_ir_module_module_group_userir_module_module group_usermodel_ir_module_modulegroup_system1111
22access_ir_module_module_dependency_group_systemir_module_module_dependency group_systemmodel_ir_module_module_dependencygroup_system1111
23access_ir_module_module_exclusion_group_systemir_module_module_exclusion group_systemmodel_ir_module_module_exclusiongroup_system1111
24access_ir_property_group_userir_property group_usermodel_ir_property0000
25access_ir_property_group_systemir_property group_systemmodel_ir_propertybase.group_system1110
26access_ir_rule_group_erp_managerir_rule group_erp_managermodel_ir_rulegroup_erp_manager1111
27access_ir_sequence_group_userir_sequence group_usermodel_ir_sequencegroup_user1000
28access_ir_sequence_group_systemir_sequence group_systemmodel_ir_sequencegroup_system1111
29access_ir_sequence_date_range_group_userir_sequence_date_range group_usermodel_ir_sequence_date_rangegroup_user1000
30access_ir_sequence_date_range_group_systemir_sequence_date_range group_systemmodel_ir_sequence_date_rangegroup_system1111
31access_ir_ui_menu_group_userir_ui_menu group_usermodel_ir_ui_menubase.group_user1000
32access_ir_ui_menu_group_systemir_ui_menu group_systemmodel_ir_ui_menugroup_system1111
33access_ir_ui_view_group_userir_ui_view group_usermodel_ir_ui_view0000
34access_ir_ui_view_group_systemir_ui_view group_systemmodel_ir_ui_viewgroup_system1111
35access_reset_view_arch_wizard_group_systemreset_view_arch_wizard group_systemmodel_reset_view_arch_wizardgroup_system1110
36access_ir_ui_view_custom_group_userir_ui_view_custom_group_usermodel_ir_ui_view_custom1111
37access_ir_default_allir_default allmodel_ir_default1000
38access_ir_default_group_userir_default group_usermodel_ir_defaultgroup_user1111
39access_ir_default_group_systemir_default group_systemmodel_ir_defaultgroup_system1111
40access_res_company_group_erp_managerres_company group_erp_managermodel_res_companygroup_erp_manager1111
41access_res_company_group_userres_company group_usermodel_res_company1000
42access_res_country_group_allres_country group_user_allmodel_res_country1000
43access_res_country_state_group_allres_country_state group_user_allmodel_res_country_state1000
44access_res_country_group_group_allres_country_group group_user_allmodel_res_country_group1000
45access_res_country_group_userres_country group_usermodel_res_countrygroup_partner_manager1000
46access_res_country_group_systemres_country_group_systemmodel_res_countrygroup_system1111
47access_res_country_state_group_userres_country_state group_usermodel_res_country_stategroup_partner_manager1111
48access_res_country_group_group_userres_country_group group_usermodel_res_country_groupgroup_partner_manager1111
49access_res_currency_group_allres_currency group_allmodel_res_currency1000
50access_res_currency_rate_group_allres_currency_rate group_allmodel_res_currency_rate1000
51access_res_currency_group_systemres_currency group_systemmodel_res_currencygroup_system1111
52access_res_currency_rate_group_systemres_currency_rate group_systemmodel_res_currency_rategroup_system1111
53access_res_groups_group_erp_managerres_groups group_erp_managermodel_res_groupsgroup_erp_manager1111
54access_res_groups_group_userres_groups group_usermodel_res_groupsgroup_user1000
55access_res_lang_group_allres_lang group_allmodel_res_lang1000
56access_res_lang_group_userres_lang group_usermodel_res_langgroup_system1111
57access_res_partner_publicres_partner group_publicmodel_res_partnergroup_public1000
58access_res_partner_portalres_partner group_portalmodel_res_partnergroup_portal1000
59access_res_partner_group_partner_managerres_partner group_partner_managermodel_res_partnergroup_partner_manager1111
60access_res_partner_group_userres_partner group_usermodel_res_partnergroup_user1000
61access_res_partner_bank_group_userres_partner_bank group_usermodel_res_partner_bankgroup_user1000
62access_res_partner_bank_group_partner_managerres_partner_bank group_partner_managermodel_res_partner_bankgroup_partner_manager1111
63access_res_partner_category_group_userres_partner_category group_usermodel_res_partner_categorygroup_user1000
64access_res_partner_category_group_partner_managerres_partner_category group_partner_managermodel_res_partner_categorygroup_partner_manager1111
65access_res_partner_industry_group_userres_partner_industry group_usermodel_res_partner_industrygroup_user1000
66access_res_partner_industry_group_systemres_partner_industry group_systemmodel_res_partner_industrygroup_system1111
67access_res_partner_title_group_userres_partner_title group_partner_managermodel_res_partner_titlegroup_partner_manager1111
68access_res_partner_title_group_partner_managerres_partner_title group_usermodel_res_partner_title1000
69access_res_users_allres_users allmodel_res_users1000
70access_res_users_group_erp_managerres_users group_erp_managermodel_res_usersgroup_erp_manager1111
71access_res_users_deletion_allres_users_deletion allmodel_res_users_deletion0000
72access_res_users_deletion_group_erp_managerres_users_deletion group_erp_managermodel_res_users_deletiongroup_erp_manager1111
73access_res_users_log_allres_users_log_allmodel_res_users_log1010
74access_res_users_identitycheck_employeeid check employeesmodel_res_users_identitycheckgroup_user1110
75access_res_users_identitycheck_portalid check portalmodel_res_users_identitycheckgroup_portal1110
76access_res_users_apikeys_access_employeeAPI keys access employeesmodel_res_users_apikeysgroup_user1000
77access_res_users_apikeys_access_portalAPI keys access portalmodel_res_users_apikeysgroup_portal1000
78access_res_users_apikeys_description_employeeAPI key wizard employeesmodel_res_users_apikeys_descriptiongroup_user1010
79access_res_users_apikeys_description_portalAPI key wizardmodel_res_users_apikeys_descriptiongroup_portal1010
80access_res_users_apikeys_show_employeeAPI key result employeesmodel_res_users_apikeys_showgroup_user1010
81access_ir_asset_group_systemir_asset_group_systemmodel_ir_assetgroup_system1111
82access_ir_actions_group_systemir_actions_group_systemmodel_ir_actions_actionsgroup_system1111
83access_ir_actions_act_window_systemir_actions_act_window_systemmodel_ir_actions_act_windowgroup_system1111
84access_ir_actions_act_window_close_group_systemir_actions_act_window_close_group_systemmodel_ir_actions_act_window_closegroup_system1111
85access_ir_actions_report_group_systemir_actions_report_group_systemmodel_ir_actions_reportgroup_system1111
86access_ir_actions_todo_group_systemir_actions_todo group systemmodel_ir_actions_todogroup_system1111
87access_ir_actions_act_window_view_group_systemir_actions_act_window_view_group_systemmodel_ir_actions_act_window_viewgroup_system1111
88access_ir_actions_act_url_group_systemir_actions_act_url_group_systemmodel_ir_actions_act_urlgroup_system1111
89access_ir_server_object_lines_group_systemir_server_object_lines_group_systemmodel_ir_server_object_linesgroup_system1111
90access_ir_actions_server_group_systemir_actions_server_group_systemmodel_ir_actions_servergroup_system1111
91access_ir_actions_clientir_actions_client allmodel_ir_actions_clientgroup_system1111
92access_res_bank_group_systemres_bank_group_systemmodel_res_bankgroup_system1111
93access_res_bank_group_partner_managerres_bank_group_partner_managermodel_res_bankgroup_partner_manager1111
94access_res_bank_userres_bank usermodel_res_bankgroup_user1000
95access_ir_filter_erp_managerir_filters allmodel_ir_filtersgroup_erp_manager1111
96access_ir_filter_userir_filters allmodel_ir_filtersgroup_user1111
97access_ir_filter_portalir_filters allmodel_ir_filtersgroup_portal1111
98access_ir_filter_publicir_filters allmodel_ir_filtersgroup_public1111
99access_ir_config_parameter_systemir_config_parameter_systemmodel_ir_config_parametergroup_system1111
100access_ir_mail_serverir_mail_servermodel_ir_mail_servergroup_system1111
101access_ir_loggingir_logging adminmodel_ir_logginggroup_erp_manager1111
102paperformat_access_portalir_actions_report_paperformat group_portalmodel_report_paperformat1000
103paperformat_access_employeeir_actions_report_paperformat group_systemmodel_report_paperformatgroup_system1111
104access_report_layoutaccess_report_layoutmodel_report_layout1111
105access_wizard_ir_model_menu_createaccess.wizard.ir.model.menu.createmodel_wizard_ir_model_menu_createbase.group_system1110
106access_reset_view_arch_wizardaccess.reset.view.arch.wizardmodel_reset_view_arch_wizardbase.group_erp_manager1110
107access_ir_demoaccess.ir.demomodel_ir_demobase.group_system1110
108access_ir_demo_failureaccess.ir.demo_failuremodel_ir_demo_failurebase.group_system1110
109access_ir_demo_failure_wizardaccess.ir.demo_failure.wizardmodel_ir_demo_failure_wizardbase.group_system1110
110access_res_configaccess.res.configmodel_res_configbase.group_system1110
111access_res_config_installeraccess.res.config.installermodel_res_config_installerbase.group_system1110
112access_res_config_settingsaccess.res.config.settingsmodel_res_config_settingsbase.group_system1110
113access_change_password_wizardaccess.change.password.wizardmodel_change_password_wizardbase.group_erp_manager1110
114access_change_password_useraccess.change.password.usermodel_change_password_userbase.group_erp_manager1110
115access_change_password_ownaccess.change.password.ownmodel_change_password_ownbase.group_user1111
116access_base_module_updateaccess.base.module.updatemodel_base_module_updatebase.group_system1110
117access_base_language_installaccess.base.language.installmodel_base_language_installbase.group_system1110
118access_base_language_importaccess.base.language.importmodel_base_language_importbase.group_system1110
119access_base_module_upgradeaccess.base.module.upgrademodel_base_module_upgradebase.group_system1110
120access_base_module_uninstallaccess.base.module.uninstallmodel_base_module_uninstallbase.group_system1110
121access_base_language_exportaccess.base.language.exportmodel_base_language_exportbase.group_user1110
122access_base_partner_merge_lineaccess.base.partner.merge.linemodel_base_partner_merge_linebase.group_partner_manager1111
123access_base_partner_merge_automatic_wizardaccess.base.partner.merge.automatic.wizardmodel_base_partner_merge_automatic_wizardbase.group_partner_manager1110
124access_ir_profileir_profilemodel_ir_profilegroup_system1111
125access_base_enable_profiling_wizardaccess.base.enable.profiling.wizardmodel_base_enable_profiling_wizardgroup_system1110