From 9129788fb721c70d2bdabe844a7ba50dd6a0d49d Mon Sep 17 00:00:00 2001 From: MuK IT GmbH Date: Thu, 18 Apr 2019 11:53:43 +0000 Subject: [PATCH] publish muk_security - 12.0 --- muk_security/README.rst | 120 ++++++++++++++++++++ muk_security/__manifest__.py | 2 +- muk_security/models/res_users.py | 9 +- muk_security/tests/test_suspend_security.py | 23 +++- muk_security/tools/security.py | 18 ++- 5 files changed, 162 insertions(+), 10 deletions(-) create mode 100644 muk_security/README.rst diff --git a/muk_security/README.rst b/muk_security/README.rst new file mode 100644 index 0000000..447ec0b --- /dev/null +++ b/muk_security/README.rst @@ -0,0 +1,120 @@ +============ +MuK Security +============ + +Technical module to provide some utility and security features that can be used +in other applications. This module has no direct effect on the running system. + +Installation +============ + +To install this module, you need to: + +Download the module and add it to your Odoo addons folder. Afterward, log on to +your Odoo server and go to the Apps menu. Trigger the debug mode and update the +list by clicking on the "Update Apps List" link. Now install the module by +clicking on the install button. + +Another way to install this module is via the package management for Python +(`PyPI `_). + +To install our modules using the package manager make sure +`odoo-autodiscover `_ is installed +correctly. Then open a console and install the module by entering the following +command: + +``pip install --extra-index-url https://nexus.mukit.at/repository/odoo/simple `` + +The module name consists of the Odoo version and the module name, where +underscores are replaced by a dash. + +**Module:** + +``odoo-addon-`` + +**Example:** + +``sudo -H pip3 install --extra-index-url https://nexus.mukit.at/repository/odoo/simple odoo11-addon-muk-utils`` + +Once the installation has been successfully completed, the app is already in the +correct folder. Log on to your Odoo server and go to the Apps menu. Trigger the +debug mode and update the list by clicking on the "Update Apps List" link. Now +install the module by clicking on the install button. + +The biggest advantage of this variant is that you can now also update the app +using the "pip" command. To do this, enter the following command in your console: + +``pip install --upgrade --extra-index-url https://nexus.mukit.at/repository/odoo/simple `` + +When the process is finished, restart your server and update the application in +Odoo. The steps are the same as for the installation only the button has changed +from "Install" to "Upgrade". + +You can also view available Apps directly in our `repository `_ +and find a more detailed installation guide on our `website `_. + +For modules licensed under OPL-1, you will receive access data when you purchase +the module. If the modules were not purchased directly from +`MuK IT `_ please contact our support (support@mukit.at) +with a confirmation of purchase to receive the corresponding access data. + +Upgrade +============ + +To upgrade this module, you need to: + +Download the module and add it to your Odoo addons folder. Restart the server +and log on to your Odoo server. Select the Apps menu and upgrade the module by +clicking on the upgrade button. + +If you installed the module using the "pip" command, you can also update the +module in the same way. Just type the following command into the console: + +``pip install --upgrade --extra-index-url https://nexus.mukit.at/repository/odoo/simple `` + +When the process is finished, restart your server and update the application in +Odoo, just like you would normally. + +Configuration +============= + +No additional configuration is needed to use this module. + +Usage +============= + +This module has no direct visible effect on the system. It provide security features. + +Credits +======= + +Contributors +------------ + +* Mathias Markl + +Images +------------ + +Some pictures are based on or inspired by the icon set of Font Awesome: + +* `Font Awesome `_ + +Projects +------------ + +Parts of the module are based on or inspired by: + +* `Suspend Security `_ + +Author & Maintainer +------------------- + +This module is maintained by the `MuK IT GmbH `_. + +MuK IT is an Austrian company specialized in customizing and extending Odoo. +We develop custom solutions for your individual needs to help you focus on +your strength and expertise to grow your business. + +If you want to get in touch please contact us via mail +(sale@mukit.at) or visit our website (https://mukit.at). diff --git a/muk_security/__manifest__.py b/muk_security/__manifest__.py index 6b9592f..ff36490 100644 --- a/muk_security/__manifest__.py +++ b/muk_security/__manifest__.py @@ -20,7 +20,7 @@ { "name": "MuK Security", "summary": """Security Features""", - "version": "12.0.1.5.4", + "version": "12.0.1.5.5", "category": "Extra Tools", "license": "AGPL-3", "website": "http://www.mukit.at", diff --git a/muk_security/models/res_users.py b/muk_security/models/res_users.py index e4b2402..a5b6f04 100644 --- a/muk_security/models/res_users.py +++ b/muk_security/models/res_users.py @@ -24,6 +24,8 @@ from odoo import tools, _ from odoo.exceptions import ValidationError from odoo.addons.muk_security.tools.security import NoSecurityUid +from odoo.addons.muk_security.tools.security import convert_security_uid + _logger = logging.getLogger(__name__) @@ -35,11 +37,10 @@ class AccessUser(models.Model): # Functions #---------------------------------------------------------- + def browse(self, arg=None, *args, **kwargs): + return super(AccessUser, self).browse(arg=convert_security_uid(arg), **kwargs) + @classmethod def _browse(cls, ids, *args, **kwargs): - def convert_security_uid(id): - if isinstance(id, NoSecurityUid): - return super(NoSecurityUid, id).__int__() - return id access_ids = [convert_security_uid(id) for id in ids] return super(AccessUser, cls)._browse(access_ids, *args, **kwargs) \ No newline at end of file diff --git a/muk_security/tests/test_suspend_security.py b/muk_security/tests/test_suspend_security.py index 4823889..c05fdff 100644 --- a/muk_security/tests/test_suspend_security.py +++ b/muk_security/tests/test_suspend_security.py @@ -45,4 +45,25 @@ class SuspendSecurityTestCase(common.TransactionCase): self.assertEqual(tester.write_uid.id, user_id) def test_normalize(self): - self.env['res.users'].browse(self.env['res.users'].suspend_security().env.uid) \ No newline at end of file + self.env['res.users'].browse(self.env['res.users'].suspend_security().env.uid) + + def test_search_one2many(self): + user = self.env.ref('base.user_demo') + model = self.env['res.partner'].sudo(user.id) + self.assertTrue(model.env.user.id == user.id) + normal_domain = [('user_ids.id', '=', model.env.uid)] + suspend_domain = [('user_ids.id', '=', model.suspend_security().env.uid)] + normal_partner = model.search(normal_domain, limit=1) + suspend_partner = model.search(suspend_domain, limit=1) + self.assertEqual(normal_partner, suspend_partner) + normal_domain = [('user_ids', '=', model.env.uid)] + suspend_domain = [('user_ids', '=', model.suspend_security().env.uid)] + normal_partner = model.search(normal_domain, limit=1) + suspend_partner = model.search(suspend_domain, limit=1) + self.assertEqual(normal_partner, suspend_partner) + normal_domain = [('user_ids.id', 'in', [model.env.uid])] + suspend_domain = [('user_ids.id', 'in', [model.suspend_security().env.uid])] + normal_partner = model.search(normal_domain, limit=1) + suspend_partner = model.search(suspend_domain, limit=1) + self.assertEqual(normal_partner, suspend_partner) + \ No newline at end of file diff --git a/muk_security/tools/security.py b/muk_security/tools/security.py index ad90aa0..6959e14 100644 --- a/muk_security/tools/security.py +++ b/muk_security/tools/security.py @@ -17,6 +17,19 @@ # ################################################################################### +#---------------------------------------------------------- +# Helper +#---------------------------------------------------------- + +def convert_security_uid(id): + if isinstance(id, NoSecurityUid): + return super(NoSecurityUid, id).__int__() + return id + +#---------------------------------------------------------- +# Model +#---------------------------------------------------------- + class NoSecurityUid(int): def __int__(self): @@ -26,9 +39,6 @@ class NoSecurityUid(int): if isinstance(other, int): return False return super(NoSecurityUid, self).__int__() == other - - def __iter__(self): - yield super(NoSecurityUid, self).__int__() - + def __hash__(self): return super(NoSecurityUid, self).__hash__() \ No newline at end of file