From 14dceac73c3c8a206b1627d28362a64ae4f53c30 Mon Sep 17 00:00:00 2001 From: Laurent Mignon Date: Fri, 21 Oct 2016 18:06:38 +0200 Subject: [PATCH 1/4] [IMP] Monkey patch BaseModel in _setup_complete so the suspend_security method is available in tests without calling the _register_hook Indeed tests are run after the call to _setup_complete and before the call to _register_hook --- base_suspend_security/README.rst | 1 + base_suspend_security/models/ir_rule.py | 4 ++-- base_suspend_security/tests/test_base_suspend_security.py | 1 - 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/base_suspend_security/README.rst b/base_suspend_security/README.rst index 886d71103d6..8e4bf7fefac 100644 --- a/base_suspend_security/README.rst +++ b/base_suspend_security/README.rst @@ -39,6 +39,7 @@ Contributors ------------ * Holger Brunn +* Laurent Mignon Maintainer ---------- diff --git a/base_suspend_security/models/ir_rule.py b/base_suspend_security/models/ir_rule.py index 86c0ff2d87d..7ce16f7422d 100644 --- a/base_suspend_security/models/ir_rule.py +++ b/base_suspend_security/models/ir_rule.py @@ -30,9 +30,9 @@ def domain_get(self, model_name, mode='read'): return [], [], ['"%s"' % self.pool[model_name]._table] return super(IrRule, self).domain_get(model_name, mode=mode) - def _register_hook(self, cr): + def _setup_complete(self, cr, uid): if not hasattr(models.BaseModel, SUSPEND_METHOD): setattr(models.BaseModel, SUSPEND_METHOD, lambda self: self.sudo( user=BaseSuspendSecurityUid(self.env.uid))) - return super(IrRule, self)._register_hook(cr) + return super(IrRule, self)._setup_complete(cr, uid) diff --git a/base_suspend_security/tests/test_base_suspend_security.py b/base_suspend_security/tests/test_base_suspend_security.py index 7621c052a6c..cdc0a31db23 100644 --- a/base_suspend_security/tests/test_base_suspend_security.py +++ b/base_suspend_security/tests/test_base_suspend_security.py @@ -24,7 +24,6 @@ class TestBaseSuspendSecurity(TransactionCase): def test_base_suspend_security(self): # tests are called before register_hook - self.env['ir.rule']._register_hook() user_id = self.env.ref('base.user_demo').id other_company = self.env['res.company'].create({ 'name': 'other company', From 5d349f185735da668292314a8afa1af873c7953e Mon Sep 17 00:00:00 2001 From: "Adrien Peiffer (ACSONE)" Date: Mon, 24 Oct 2016 17:27:40 +0200 Subject: [PATCH 2/4] Migration of base_suspend_security to 10.0 --- base_suspend_security/README.rst | 3 +-- base_suspend_security/__manifest__.py | 10 +--------- base_suspend_security/base_suspend_security.py | 3 --- base_suspend_security/models/__init__.py | 1 + base_suspend_security/models/base.py | 15 +++++++++++++++ base_suspend_security/models/ir_model_access.py | 13 ++++++------- base_suspend_security/models/ir_rule.py | 11 ++--------- base_suspend_security/models/res_users.py | 7 +++---- .../tests/test_base_suspend_security.py | 5 ++--- 9 files changed, 31 insertions(+), 37 deletions(-) create mode 100644 base_suspend_security/models/base.py diff --git a/base_suspend_security/README.rst b/base_suspend_security/README.rst index 8e4bf7fefac..3bc2cc8f122 100644 --- a/base_suspend_security/README.rst +++ b/base_suspend_security/README.rst @@ -29,8 +29,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. -If you spotted it first, help us smashing it by providing a detailed and welcomed feedback -`here `_. +If you spotted it first, help us smashing it by providing a detailed and welcomed feedback. Credits ======= diff --git a/base_suspend_security/__manifest__.py b/base_suspend_security/__manifest__.py index 3fa4218f4bf..d3cf3058af8 100644 --- a/base_suspend_security/__manifest__.py +++ b/base_suspend_security/__manifest__.py @@ -19,7 +19,7 @@ ############################################################################## { "name": "Suspend security", - "version": "9.0.1.0.0", + "version": "10.0.1.0.0", "author": "Therp BV", "license": "AGPL-3", "category": "Hidden/Dependency", @@ -27,12 +27,4 @@ "depends": [ 'base', ], - "test": [ - ], - "auto_install": False, - 'installable': False, - "application": False, - "external_dependencies": { - 'python': [], - }, } diff --git a/base_suspend_security/base_suspend_security.py b/base_suspend_security/base_suspend_security.py index 991d8be8033..dc7cdc46af2 100644 --- a/base_suspend_security/base_suspend_security.py +++ b/base_suspend_security/base_suspend_security.py @@ -30,6 +30,3 @@ def __eq__(self, other): def __iter__(self): yield super(BaseSuspendSecurityUid, self).__int__() - - -SUSPEND_METHOD = 'suspend_security' diff --git a/base_suspend_security/models/__init__.py b/base_suspend_security/models/__init__.py index 864544856c3..029724b876b 100644 --- a/base_suspend_security/models/__init__.py +++ b/base_suspend_security/models/__init__.py @@ -20,3 +20,4 @@ from . import ir_rule from . import ir_model_access from . import res_users +from . import base diff --git a/base_suspend_security/models/base.py b/base_suspend_security/models/base.py new file mode 100644 index 00000000000..53b462b9972 --- /dev/null +++ b/base_suspend_security/models/base.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +# Copyright 2016 ACSONE SA/NV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, models +from ..base_suspend_security import BaseSuspendSecurityUid + + +class Base(models.AbstractModel): + + _inherit = 'base' + + @api.model + def suspend_security(self): + return self.sudo(user=BaseSuspendSecurityUid(self.env.uid)) diff --git a/base_suspend_security/models/ir_model_access.py b/base_suspend_security/models/ir_model_access.py index 9a0afa3d97a..f67d86321b3 100644 --- a/base_suspend_security/models/ir_model_access.py +++ b/base_suspend_security/models/ir_model_access.py @@ -17,19 +17,18 @@ # along with this program. If not, see . # ############################################################################## -from openerp import models, tools +from odoo import models, api, tools from ..base_suspend_security import BaseSuspendSecurityUid class IrModelAccess(models.Model): _inherit = 'ir.model.access' - @tools.ormcache_context('uid', 'model', 'mode', 'raise_exception', + @api.model + @tools.ormcache_context('self._uid', 'model', 'mode', 'raise_exception', keys=('lang',)) - def check(self, cr, uid, model, mode='read', raise_exception=True, - context=None): - if isinstance(uid, BaseSuspendSecurityUid): + def check(self, model, mode='read', raise_exception=True): + if isinstance(self.env.uid, BaseSuspendSecurityUid): return True return super(IrModelAccess, self).check( - cr, uid, model, mode=mode, raise_exception=raise_exception, - context=context) + model, mode=mode, raise_exception=raise_exception) diff --git a/base_suspend_security/models/ir_rule.py b/base_suspend_security/models/ir_rule.py index 7ce16f7422d..21a121ec1cd 100644 --- a/base_suspend_security/models/ir_rule.py +++ b/base_suspend_security/models/ir_rule.py @@ -17,8 +17,8 @@ # along with this program. If not, see . # ############################################################################## -from openerp import models, api -from ..base_suspend_security import BaseSuspendSecurityUid, SUSPEND_METHOD +from odoo import models, api +from ..base_suspend_security import BaseSuspendSecurityUid class IrRule(models.Model): @@ -29,10 +29,3 @@ def domain_get(self, model_name, mode='read'): if isinstance(self.env.uid, BaseSuspendSecurityUid): return [], [], ['"%s"' % self.pool[model_name]._table] return super(IrRule, self).domain_get(model_name, mode=mode) - - def _setup_complete(self, cr, uid): - if not hasattr(models.BaseModel, SUSPEND_METHOD): - setattr(models.BaseModel, SUSPEND_METHOD, - lambda self: self.sudo( - user=BaseSuspendSecurityUid(self.env.uid))) - return super(IrRule, self)._setup_complete(cr, uid) diff --git a/base_suspend_security/models/res_users.py b/base_suspend_security/models/res_users.py index be402570adf..a5e3b2426e4 100644 --- a/base_suspend_security/models/res_users.py +++ b/base_suspend_security/models/res_users.py @@ -17,7 +17,7 @@ # along with this program. If not, see . # ############################################################################## -from openerp import models +from odoo import models from ..base_suspend_security import BaseSuspendSecurityUid @@ -25,12 +25,11 @@ class ResUsers(models.Model): _inherit = 'res.users' @classmethod - def _browse(cls, env, ids): + def _browse(cls, ids, env, prefetch=None): """be sure we browse ints, ids laread is normalized""" return super(ResUsers, cls)._browse( - env, [ i if not isinstance(i, BaseSuspendSecurityUid) else super(BaseSuspendSecurityUid, i).__int__() for i in ids - ]) + ], env, prefetch=prefetch) diff --git a/base_suspend_security/tests/test_base_suspend_security.py b/base_suspend_security/tests/test_base_suspend_security.py index cdc0a31db23..8e1bb5a6e56 100644 --- a/base_suspend_security/tests/test_base_suspend_security.py +++ b/base_suspend_security/tests/test_base_suspend_security.py @@ -17,13 +17,12 @@ # along with this program. If not, see . # ############################################################################## -from openerp import exceptions -from openerp.tests.common import TransactionCase +from odoo import exceptions +from odoo.tests.common import TransactionCase class TestBaseSuspendSecurity(TransactionCase): def test_base_suspend_security(self): - # tests are called before register_hook user_id = self.env.ref('base.user_demo').id other_company = self.env['res.company'].create({ 'name': 'other company', From 43e5d0cbdf3a0432a2990f04853fda236f085054 Mon Sep 17 00:00:00 2001 From: "Adrien Peiffer (ACSONE)" Date: Mon, 24 Oct 2016 17:29:22 +0200 Subject: [PATCH 3/4] [ADD] setup.py --- setup/base_suspend_security/odoo/__init__.py | 1 + setup/base_suspend_security/odoo/addons/__init__.py | 1 + .../base_suspend_security/odoo/addons/base_suspend_security | 1 + setup/base_suspend_security/setup.py | 6 ++++++ 4 files changed, 9 insertions(+) create mode 100644 setup/base_suspend_security/odoo/__init__.py create mode 100644 setup/base_suspend_security/odoo/addons/__init__.py create mode 120000 setup/base_suspend_security/odoo/addons/base_suspend_security create mode 100644 setup/base_suspend_security/setup.py diff --git a/setup/base_suspend_security/odoo/__init__.py b/setup/base_suspend_security/odoo/__init__.py new file mode 100644 index 00000000000..de40ea7ca05 --- /dev/null +++ b/setup/base_suspend_security/odoo/__init__.py @@ -0,0 +1 @@ +__import__('pkg_resources').declare_namespace(__name__) diff --git a/setup/base_suspend_security/odoo/addons/__init__.py b/setup/base_suspend_security/odoo/addons/__init__.py new file mode 100644 index 00000000000..de40ea7ca05 --- /dev/null +++ b/setup/base_suspend_security/odoo/addons/__init__.py @@ -0,0 +1 @@ +__import__('pkg_resources').declare_namespace(__name__) diff --git a/setup/base_suspend_security/odoo/addons/base_suspend_security b/setup/base_suspend_security/odoo/addons/base_suspend_security new file mode 120000 index 00000000000..5b117c63404 --- /dev/null +++ b/setup/base_suspend_security/odoo/addons/base_suspend_security @@ -0,0 +1 @@ +../../../../base_suspend_security \ No newline at end of file diff --git a/setup/base_suspend_security/setup.py b/setup/base_suspend_security/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/base_suspend_security/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) From 1b1ae47b94a58aa1b804fbf9e3967f10dd325e47 Mon Sep 17 00:00:00 2001 From: "Adrien Peiffer (ACSONE)" Date: Fri, 28 Oct 2016 09:39:52 +0200 Subject: [PATCH 4/4] [IMP] Add OCA as author --- base_suspend_security/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base_suspend_security/__manifest__.py b/base_suspend_security/__manifest__.py index d3cf3058af8..2d3d0446126 100644 --- a/base_suspend_security/__manifest__.py +++ b/base_suspend_security/__manifest__.py @@ -20,7 +20,7 @@ { "name": "Suspend security", "version": "10.0.1.0.0", - "author": "Therp BV", + "author": "Therp BV, Odoo Community Association (OCA)", "license": "AGPL-3", "category": "Hidden/Dependency", "summary": "Suspend security checks for a call",