[IMP] base: remove read access to ir.ui.view

Only system users should be able to access directly ir.ui.view records
Other users should use helper methods like fields_view_get or render
to interact with view records (or use sudo)

Give read access to views to publisher
He needs to call read_template on some views like
'web_editor.colorpicker' in edition mode

Restrict ACL on website.page
Apply the same ACL than on ir.ui.view as the model inherits from it.
Give access to designer to modify views
This commit is contained in:
Martin Trigaux
2020-05-14 13:59:10 +02:00
parent ac9fb3b120
commit ccc98e0169
3 changed files with 19 additions and 4 deletions
+3 -2
View File
@@ -5,9 +5,10 @@ access_website_menu,access_website_menu,model_website_menu,,1,0,0,0
access_website_menu_designer,Web Menu Manager,model_website_menu,group_website_designer,1,1,1,1
access_website_rewrite,access_website_rewrite,model_website_rewrite,,0,0,0,0
access_website_rewrite_designer,Web Rewrite Manager,model_website_rewrite,group_website_designer,1,1,1,1
access_website_page,access_website_page,model_website_page,,1,0,0,0
access_website_page,access_website_page,model_website_page,,0,0,0,0
access_website_page_designer,Web Page Manager,model_website_page,group_website_designer,1,1,1,1
access_website_ir_ui_view,access_website_ir_ui_view,model_ir_ui_view,group_website_designer,1,1,1,1
access_website_ir_ui_view_publisher,access_website_ir_ui_view_publisher,model_ir_ui_view,group_website_publisher,1,0,0,0
access_website_ir_ui_view_designer,access_website_ir_ui_view_designer,model_ir_ui_view,group_website_designer,1,1,1,1
access_seo_public,access_seo_public,model_website_seo_metadata,,1,0,0,0
access_seo_designer,access_seo_designer,model_website_seo_metadata,group_website_designer,1,1,1,1
access_website_visitor_designer,access_website_visitor_designer,model_website_visitor,website.group_website_designer,1,1,0,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
5 access_website_menu_designer Web Menu Manager model_website_menu group_website_designer 1 1 1 1
6 access_website_rewrite access_website_rewrite model_website_rewrite 0 0 0 0
7 access_website_rewrite_designer Web Rewrite Manager model_website_rewrite group_website_designer 1 1 1 1
8 access_website_page access_website_page model_website_page 1 0 0 0 0
9 access_website_page_designer Web Page Manager model_website_page group_website_designer 1 1 1 1
10 access_website_ir_ui_view access_website_ir_ui_view_publisher access_website_ir_ui_view access_website_ir_ui_view_publisher model_ir_ui_view group_website_designer group_website_publisher 1 1 0 1 0 1 0
11 access_website_ir_ui_view_designer access_website_ir_ui_view_designer model_ir_ui_view group_website_designer 1 1 1 1
12 access_seo_public access_seo_public model_website_seo_metadata 1 0 0 0
13 access_seo_designer access_seo_designer model_website_seo_metadata group_website_designer 1 1 1 1
14 access_website_visitor_designer access_website_visitor_designer model_website_visitor website.group_website_designer 1 1 0 1
@@ -31,7 +31,7 @@
"access_ir_translation_group_system","ir_translation group_system","model_ir_translation","group_system",1,1,1,1
"access_ir_ui_menu_group_user","ir_ui_menu group_user","model_ir_ui_menu",base.group_user,1,0,0,0
"access_ir_ui_menu_group_system","ir_ui_menu group_system","model_ir_ui_menu","group_system",1,1,1,1
"access_ir_ui_view_group_user","ir_ui_view group_user","model_ir_ui_view",,1,0,0,0
"access_ir_ui_view_group_user","ir_ui_view group_user","model_ir_ui_view",,0,0,0,0
"access_ir_ui_view_group_system","ir_ui_view group_system","model_ir_ui_view","group_system",1,1,1,1
"access_reset_view_arch_wizard_group_system","reset_view_arch_wizard group_system","model_reset_view_arch_wizard","group_system",1,1,1,0
"access_ir_ui_view_custom_group_user","ir_ui_view_custom_group_user","model_ir_ui_view_custom",,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
31 access_ir_translation_group_system ir_translation group_system model_ir_translation group_system 1 1 1 1
32 access_ir_ui_menu_group_user ir_ui_menu group_user model_ir_ui_menu base.group_user 1 0 0 0
33 access_ir_ui_menu_group_system ir_ui_menu group_system model_ir_ui_menu group_system 1 1 1 1
34 access_ir_ui_view_group_user ir_ui_view group_user model_ir_ui_view 1 0 0 0 0
35 access_ir_ui_view_group_system ir_ui_view group_system model_ir_ui_view group_system 1 1 1 1
36 access_reset_view_arch_wizard_group_system reset_view_arch_wizard group_system model_reset_view_arch_wizard group_system 1 1 1 0
37 access_ir_ui_view_custom_group_user ir_ui_view_custom_group_user model_ir_ui_view_custom 1 1 1 1
+15 -1
View File
@@ -9,7 +9,7 @@ from lxml import etree
from lxml.builder import E
from psycopg2 import IntegrityError
from odoo.exceptions import ValidationError
from odoo.exceptions import AccessError, ValidationError
from odoo.tests import common
from odoo.tools import mute_logger, view_validation
from odoo.addons.base.models.ir_ui_view import (
@@ -2923,6 +2923,20 @@ class TestValidationTools(common.BaseCase):
{'x', 'y', 'z'},
)
class TestAccessRights(common.TransactionCase):
@common.users('demo')
def test_access(self):
# a user can not access directly a view
with self.assertRaises(AccessError):
self.env['ir.ui.view'].search([("model", '=', "res.partner"), ('type', '=', 'form')])
# but can call fields_view_get
self.env['res.partner'].fields_view_get(view_type='form')
# unless he does not have access to the model
with self.assertRaises(AccessError):
self.env['ir.ui.view'].fields_view_get(view_type='form')
@common.tagged('post_install', '-at_install', '-standard', 'migration')
class TestAllViews(common.TransactionCase):