Files
odoo_source/addons/web/tests/test_ir_model.py
T
std-odoo a740989ba5 [MOV] web: move the domain selector component to web
Purpose
=======

For security reason access on ir.model is not granted to internal suers. Due
to this constraint a component exists in spreadsheet to be able to select
the models for which we have a read access on the records of this model.

This is required for the properties fields feature, hence moving its code
to web.

Some renaming is performed to make it generic. This generates some changes
in other addons, notably some class renaming.el.

Task-2852259

Part-of: odoo/odoo#95184
2022-08-29 23:46:07 +02:00

66 lines
3.0 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.tests.common import TransactionCase
from odoo.tests import tagged
from odoo.tests.common import new_test_user
@tagged("post_install", "-at_install")
class IrModelAccessTest(TransactionCase):
@classmethod
def setUpClass(cls):
super(IrModelAccessTest, cls).setUpClass()
cls.env['ir.model.access'].create({
'name': "read",
'model_id': cls.env['ir.model'].search([("model", "=", "res.company")]).id,
'group_id': cls.env.ref("base.group_public").id,
'perm_read': False,
})
cls.env['ir.model.access'].create({
'name': "read",
'model_id': cls.env['ir.model'].search([("model", "=", "res.company")]).id,
'group_id': cls.env.ref("base.group_portal").id,
'perm_read': True,
})
cls.env['ir.model.access'].create({
'name': "read",
'model_id': cls.env['ir.model'].search([("model", "=", "res.company")]).id,
'group_id': cls.env.ref("base.group_user").id,
'perm_read': True,
})
cls.portal_user = new_test_user(
cls.env, login="portalDude", groups="base.group_portal"
)
cls.public_user = new_test_user(
cls.env, login="publicDude", groups="base.group_public"
)
cls.spreadsheet_user = new_test_user(
cls.env, login="spreadsheetDude", groups="base.group_user"
)
def test_display_name_for(self):
# Internal User with access rights can access the business name
result = self.env['ir.model'].with_user(self.spreadsheet_user).display_name_for(["res.company"])
self.assertEqual(result, [{"display_name": "Companies", "model": "res.company"}])
# external user with access rights cannot access business name
result = self.env['ir.model'].with_user(self.portal_user).display_name_for(["res.company"])
self.assertEqual(result, [{"display_name": "res.company", "model": "res.company"}])
# external user without access rights cannot access business name
result = self.env['ir.model'].with_user(self.public_user).display_name_for(["res.company"])
self.assertEqual(result, [{"display_name": "res.company", "model": "res.company"}])
# admin has all rights
result = self.env['ir.model'].display_name_for(["res.company"])
self.assertEqual(result, [{"display_name": "Companies", "model": "res.company"}])
# non existent model yields same result as a lack of access rights
result = self.env['ir.model'].display_name_for(["unexistent"])
self.assertEqual(result, [{"display_name": "unexistent", "model": "unexistent"}])
# non existent model comes after existent model
result = self.env['ir.model'].display_name_for(["res.company", "unexistent"])
self.assertEqual(result, [{"display_name": "Companies", "model": "res.company"}, {"display_name": "unexistent", "model": "unexistent"}])