Browse Source

[10.0][ADD] Module base_import_csv_optional

This module makes importing data from CSV files optional for each user, allowing it only for those users belonging to a specific group.

[FIX] Solved flake8 error E305: expected 2 blank lines after class or function definition, found 1

[FIX] Renamed base_import_csv_optional in base_import_security_group

[FIX] Solved flake8 error E501: line too long;

[FIX] Removed unnecessary monkeypatch and extended Base.load method;

[FIX] Bugfixing in Base.load method;

[FIX] Code refactoring

[IMP] Tests created
pull/694/head
antonio 8 years ago
parent
commit
5392971017
  1. 67
      base_import_security_group/README.rst
  2. 6
      base_import_security_group/__init__.py
  3. 26
      base_import_security_group/__manifest__.py
  4. 21
      base_import_security_group/i18n/ca.po
  5. 21
      base_import_security_group/i18n/es.po
  6. 21
      base_import_security_group/i18n/fr.po
  7. 21
      base_import_security_group/i18n/gl.po
  8. 21
      base_import_security_group/i18n/it.po
  9. 21
      base_import_security_group/i18n/pt.po
  10. 21
      base_import_security_group/i18n/sk.po
  11. 6
      base_import_security_group/models/__init__.py
  12. 39
      base_import_security_group/models/models.py
  13. 11
      base_import_security_group/security/base_import_security_group_security.xml
  14. BIN
      base_import_security_group/static/description/icon.png
  15. 168
      base_import_security_group/static/description/icon.svg
  16. 30
      base_import_security_group/static/src/js/import.js
  17. 5
      base_import_security_group/tests/__init__.py
  18. 49
      base_import_security_group/tests/test_base_import_security_group.py
  19. 10
      base_import_security_group/views/base_import.xml

67
base_import_security_group/README.rst

@ -0,0 +1,67 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
===============================================
Group-based permissions for importing CSV files
===============================================
This module makes importing data from CSV files optional for each user,
allowing it only for those users belonging to a specific group.
Any other user not belonging to such group will not have the "Import" button
available anywhere. The action will even be blocked internally (to prevent
XMLRPC access, for example).
Usage
=====
To allow a user to import data from CSV files, just follow this steps:
* Go to *Settings/Users/Users* menu.
* Enter the user you want to allow.
* Within the "Access Rights" tab and "Technical Settings" group, check the
option "Allow importing CSV files".
For further information, please visit:
- https://www.odoo.com/forum/help-1
Bug Tracker
===========
Bugs are tracked on `GitHub Issues
<https://github.com/OCA/server-tools/issues>`_. In case of trouble, please
check there if your issue has already been reported. If you spotted it first,
help us smash it by providing detailed and welcomed feedback.
Credits
=======
Contributors
------------
* Alejandro Santana <alejandrosantana@anubia.es>
* Antonio Esposito <a.esposito@onestein.nl>
Maintainer
----------
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
This module is maintained by the OCA.
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
To contribute to this module, please visit https://odoo-community.org.
Icon
----
Iconic fonts used in module icon are Font Awesome: http://fontawesome.io/

6
base_import_security_group/__init__.py

@ -0,0 +1,6 @@
# -*- coding: utf-8 -*-
# Copyright 2015 Anubía, soluciones en la nube,SL (http://www.anubia.es)
# Copyright 2017 Onestein (http://www.onestein.eu)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import models

26
base_import_security_group/__manifest__.py

@ -0,0 +1,26 @@
# -*- coding: utf-8 -*-
# Copyright 2015 Anubía, soluciones en la nube,SL (http://www.anubia.es)
# Copyright 2017 Onestein (http://www.onestein.eu)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
{
'name': 'Optional CSV import',
'version': '10.0.1.0.0',
'category': 'Server tools',
'summary': 'Group-based permissions for importing CSV files',
'license': 'AGPL-3',
'author': 'Odoo Community Association (OCA), '
'Alejandro Santana <alejandrosantana@anubia.es>, '
'Onestein',
'maintainer': 'Odoo Community Association (OCA)',
'website': 'http://odoo-community.org',
'depends': [
'web',
'base_import',
],
'data': [
'security/base_import_security_group_security.xml',
'views/base_import.xml',
],
'installable': True,
}

21
base_import_security_group/i18n/ca.po

@ -0,0 +1,21 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_import_security_group
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-08-06 18:37+0000\n"
"PO-Revision-Date: 2015-08-06 18:37+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: base_import_security_group
#: model:res.groups,name:base_import_security_group.group_import_csv
msgid "Import CSV files"
msgstr "Importar arxius CSV"

21
base_import_security_group/i18n/es.po

@ -0,0 +1,21 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_import_security_group
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-08-06 18:37+0000\n"
"PO-Revision-Date: 2015-08-06 18:37+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: base_import_security_group
#: model:res.groups,name:base_import_security_group.group_import_csv
msgid "Import CSV files"
msgstr "Importar archivos CSV"

21
base_import_security_group/i18n/fr.po

@ -0,0 +1,21 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_import_security_group
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-08-06 18:37+0000\n"
"PO-Revision-Date: 2015-08-06 18:37+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: base_import_security_group
#: model:res.groups,name:base_import_security_group.group_import_csv
msgid "Import CSV files"
msgstr "Importation de fichiers CSV"

21
base_import_security_group/i18n/gl.po

@ -0,0 +1,21 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_import_security_group
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-08-06 18:37+0000\n"
"PO-Revision-Date: 2015-08-06 18:37+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: base_import_security_group
#: model:res.groups,name:base_import_security_group.group_import_csv
msgid "Import CSV files"
msgstr "Importar arquivos CSV"

21
base_import_security_group/i18n/it.po

@ -0,0 +1,21 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_import_security_group
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-08-06 18:37+0000\n"
"PO-Revision-Date: 2015-08-06 18:37+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: base_import_security_group
#: model:res.groups,name:base_import_security_group.group_import_csv
msgid "Import CSV files"
msgstr "Importazione di file CSV"

21
base_import_security_group/i18n/pt.po

@ -0,0 +1,21 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_import_security_group
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-08-06 18:37+0000\n"
"PO-Revision-Date: 2015-08-06 18:37+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: base_import_security_group
#: model:res.groups,name:base_import_security_group.group_import_csv
msgid "Import CSV files"
msgstr "Importar arquivos CSV"

21
base_import_security_group/i18n/sk.po

@ -0,0 +1,21 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_import_security_group
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-08-06 18:37+0000\n"
"PO-Revision-Date: 2015-08-06 18:37+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: base_import_security_group
#: model:res.groups,name:base_import_security_group.group_import_csv
msgid "Import CSV files"
msgstr "Importovať súbory CSV"

6
base_import_security_group/models/__init__.py

@ -0,0 +1,6 @@
# -*- coding: utf-8 -*-
# Copyright 2015 Anubía, soluciones en la nube,SL (http://www.anubia.es)
# Copyright 2017 Onestein (http://www.onestein.eu)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import models

39
base_import_security_group/models/models.py

@ -0,0 +1,39 @@
# -*- coding: utf-8 -*-
# Copyright 2015 Anubía, soluciones en la nube,SL (http://www.anubia.es)
# Copyright 2017 Onestein (http://www.onestein.eu)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
import logging
from odoo import api, models
_logger = logging.getLogger(__name__)
class Base(models.AbstractModel):
_inherit = 'base'
@api.model
def load(self, fields, data):
'''Overriding this method we only allow its execution
if current user belongs to the group allowed for CSV data import.
An exception is raised otherwise, and also log the import attempt.
'''
current_user = self.env.user
allowed_group = 'base_import_security_group.group_import_csv'
allowed_group_id = self.env.ref(
allowed_group,
raise_if_not_found=False
)
if not allowed_group_id or current_user.has_group(allowed_group):
res = super(Base, self).load(fields=fields, data=data)
else:
msg = ('User (ID: %s) is not allowed to import data '
'in model %s.') % (self.env.uid, self._name)
_logger.info(msg)
messages = []
info = {}
messages.append(
dict(info, type='error', message=msg, moreinfo=None))
res = {'ids': None, 'messages': messages}
return res

11
base_import_security_group/security/base_import_security_group_security.xml

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- GROUPS -->
<record id="group_import_csv" model="res.groups">
<field name="name">Import CSV files</field>
<field name="category_id" ref="base.module_category_hidden"/>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
</record>
</odoo>

BIN
base_import_security_group/static/description/icon.png

After

Width: 128  |  Height: 128  |  Size: 2.7 KiB

168
base_import_security_group/static/description/icon.svg

@ -0,0 +1,168 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
width="128"
height="128"
sodipodi:docname="icon.svg"
inkscape:export-filename="icon.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<metadata
id="metadata8">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs6">
<linearGradient
id="linearGradient3779">
<stop
style="stop-color:#ff6600;stop-opacity:1;"
offset="0"
id="stop3781" />
<stop
style="stop-color:#ffcc00;stop-opacity:1;"
offset="1"
id="stop3783" />
</linearGradient>
<linearGradient
id="linearGradient3798">
<stop
style="stop-color:#99cc00;stop-opacity:1;"
offset="0"
id="stop3800" />
<stop
style="stop-color:#669900;stop-opacity:1;"
offset="1"
id="stop3802" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3798"
id="linearGradient3804"
x1="64"
y1="124"
x2="64"
y2="4"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-140,0)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3798"
id="linearGradient4053"
gradientUnits="userSpaceOnUse"
x1="64"
y1="124"
x2="64"
y2="4" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3779"
id="linearGradient3874"
x1="64"
y1="136"
x2="64"
y2="8"
gradientUnits="userSpaceOnUse" />
</defs>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1025"
id="namedview4"
showgrid="false"
inkscape:zoom="1.4142136"
inkscape:cx="24.182947"
inkscape:cy="79.115464"
inkscape:window-x="-2"
inkscape:window-y="-3"
inkscape:window-maximized="1"
inkscape:current-layer="svg2"
inkscape:snap-bbox="false"
inkscape:bbox-paths="true"
inkscape:bbox-nodes="true"
inkscape:snap-bbox-edge-midpoints="true"
inkscape:snap-bbox-midpoints="true"
inkscape:object-paths="true"
inkscape:snap-midpoints="true"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
inkscape:snap-page="false"
inkscape:snap-smooth-nodes="true"
inkscape:object-nodes="true"
inkscape:snap-intersection-paths="true"
inkscape:snap-grids="false"
showguides="true"
inkscape:guide-bbox="true"
borderlayer="true"
inkscape:snap-nodes="false"
inkscape:snap-global="true">
<inkscape:grid
type="xygrid"
id="grid2984"
empspacing="4"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true"
dotted="false" />
</sodipodi:namedview>
<rect
style="fill:#ff7f2a;fill-opacity:1;stroke:none"
id="rect3858"
width="128"
height="128"
x="-128"
y="0"
transform="matrix(0,-1,1,0,0,0)" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="-184.20132"
y="6.0240803"
id="text2995"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan2997"
x="-184.20132"
y="6.0240803" /></text>
<path
style="fill:#c87137;fill-opacity:1;stroke:none"
d="M 48.46875 39.1875 L 0 87.65625 L 0 128 L 76.78125 128 L 102.90625 101.875 L 99.53125 98.5 L 101.9375 96.0625 L 92.71875 86.8125 L 90.28125 89.25 L 80.09375 79.0625 L 80.0625 79.125 L 78.96875 78.03125 L 68.09375 88.90625 L 69.1875 89.96875 L 64.75 94.40625 L 59.90625 89.53125 L 72.34375 77.09375 L 67.6875 72.4375 L 87.71875 52.40625 L 78.5 43.15625 L 65.46875 56.1875 L 48.46875 39.1875 z "
id="rect3087" />
<path
id="path3027"
d="m 85.85809,93.664544 q 0,-1.26855 -0.92703,-2.195567 -0.92701,-0.927017 -2.19556,-0.927017 -1.26855,0 -2.19557,0.927017 -0.92702,0.927017 -0.92702,2.195567 0,1.268548 0.92702,2.195566 0.92702,0.927017 2.19557,0.927017 1.26855,0 2.19556,-0.927017 0.92703,-0.927018 0.92703,-2.195566 z m 12.49033,0 q 0,-1.26855 -0.92702,-2.195567 -0.92702,-0.927017 -2.19556,-0.927017 -1.26856,0 -2.19557,0.927017 -0.92702,0.927017 -0.92702,2.195567 0,1.268548 0.92702,2.195566 0.92701,0.927017 2.19557,0.927017 1.26854,0 2.19556,-0.927017 0.92702,-0.927018 0.92702,-2.195566 z M 104.59359,82.7355 v 15.612919 q 0,1.951621 -1.36614,3.317751 -1.36613,1.36613 -3.31774,1.36613 H 28.09028 q -1.95161,0 -3.31774,-1.36613 -1.36613,-1.36613 -1.36613,-3.317751 V 82.7355 q 0,-1.951615 1.36613,-3.317745 1.36613,-1.36613 3.31774,-1.36613 h 20.83349 q 1.0246,2.73226 3.43972,4.488715 2.41512,1.756452 5.39134,1.756452 h 12.49033 q 2.97621,0 5.39134,-1.756452 2.41512,-1.756455 3.43972,-4.488715 h 20.83349 q 1.95161,0 3.31774,1.36613 1.36614,1.36613 1.36614,3.317745 z M 88.73671,51.119343 q -0.82943,1.951614 -2.87862,1.951614 H 73.36775 v 21.858085 q 0,1.26855 -0.92702,2.195567 -0.92702,0.927017 -2.19557,0.927017 H 57.75483 q -1.26855,0 -2.19557,-0.927017 -0.92701,-0.927017 -0.92701,-2.195567 V 53.070957 H 42.14191 q -2.04919,0 -2.87863,-1.951614 -0.82944,-1.902825 0.68306,-3.366536 L 61.80443,25.894722 Q 62.68265,24.967705 64,24.967705 q 1.31733,0 2.19556,0.927017 l 21.85809,21.858085 q 1.5125,1.463711 0.68306,3.366536 z"
inkscape:connector-curvature="0"
style="fill:#ffffff" />
<path
id="path3016"
d="m 66.979191,59.343527 v 4.895685 q 0,0.326379 -0.244778,0.571165 -0.244797,0.244783 -0.571181,0.244783 h -4.895668 q -0.326383,0 -0.571181,-0.244783 -0.244777,-0.244786 -0.244777,-0.571165 v -4.895685 q 0,-0.32638 0.244777,-0.571163 0.244798,-0.244785 0.571181,-0.244785 h 4.895668 q 0.326384,0 0.571181,0.244785 0.244778,0.244783 0.244778,0.571163 z M 73.42517,47.104314 q 0,1.101528 -0.316172,2.060266 -0.316173,0.958739 -0.713951,1.560501 -0.397778,0.601761 -1.121941,1.213721 -0.724141,0.611962 -1.172913,0.887343 -0.448772,0.275383 -1.244329,0.724154 -0.836339,0.469171 -1.397309,1.325916 -0.56097,0.856745 -0.56097,1.366711 0,0.346777 -0.244778,0.662957 -0.244777,0.316181 -0.57116,0.316181 h -4.895689 q -0.305982,0 -0.520167,-0.377377 -0.214185,-0.377375 -0.214185,-0.76495 v -0.917942 q 0,-1.69309 1.325914,-3.192395 1.325915,-1.499303 2.917008,-2.213257 1.203525,-0.550764 1.713502,-1.142326 0.509956,-0.591562 0.509956,-1.5503 0,-0.856745 -0.948537,-1.509503 -0.948538,-0.652759 -2.192846,-0.652759 -1.325915,0 -2.203057,0.591562 -0.713971,0.509966 -2.182676,2.345849 -0.265178,0.326379 -0.632345,0.326379 -0.244797,0 -0.509976,-0.163189 L 54.903171,45.45202 q -0.265199,-0.203986 -0.316193,-0.509968 -0.05099,-0.30598 0.112198,-0.571163 3.263793,-5.426052 9.464994,-5.426052 1.631896,0 3.284194,0.632361 1.652298,0.632359 2.978212,1.69309 1.325915,1.060732 2.162254,2.600834 0.83634,1.540099 0.83634,3.233192 z"
inkscape:connector-curvature="0"
style="fill:#c87137" />
</svg>

30
base_import_security_group/static/src/js/import.js

@ -0,0 +1,30 @@
odoo.define('web.ListImport', function (require) {
"use strict";
var core = require('web.core');
var ListView = require('web.ListView');
var Model = require('web.Model');
ListView.prototype.defaults.import_enabled = false;
ListView.include(/** @lends instance.web.ListView# */{
load_list: function (data, grouped) {
var self = this;
var Users = new Model('res.users');
var result = this._super.apply(this, arguments);
Users.call('has_group', ['base_import_security_group.group_import_csv'])
.then(function (result) {
var import_enabled = result;
self.options.import_enabled = import_enabled;
if (import_enabled === false) {
if (self.$buttons) {
self.$buttons.find('.o_button_import').remove();
}
}
});
return result;
}
});
});

5
base_import_security_group/tests/__init__.py

@ -0,0 +1,5 @@
# -*- coding: utf-8 -*-
# Copyright 2017 Onestein (http://www.onestein.eu)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import test_base_import_security_group

49
base_import_security_group/tests/test_base_import_security_group.py

@ -0,0 +1,49 @@
# -*- coding: utf-8 -*-
# Copyright 2017 Onestein (http://www.onestein.eu)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo.tests import common
class TestImportSecurityGroup(common.TransactionCase):
def setUp(self):
super(TestImportSecurityGroup, self).setUp()
self.Access = self.env['ir.model.access']
self.user_test = self.env.ref('base.user_demo')
def test_01_load(self):
fields = (
'id',
'name',
'perm_read',
'perm_write',
'perm_create',
'perm_unlink',
)
data = [
('access_res_users_test', 'res.users test', '1', '0', '0', '0',),
('access_res_users_test2', 'res.users test2', '1', '1', '1', '1'),
]
res = self.Access.load(fields, data)
self.assertEqual(res['ids'], False)
self.assertEqual(len(res['messages']), 2)
self.assertEqual(
res['messages'][0]['message'],
"Missing required value for the field 'Object' (model_id)")
self.assertEqual(
res['messages'][1]['message'],
"Missing required value for the field 'Object' (model_id)")
res2 = self.Access.sudo(self.user_test).load(fields, data)
self.assertEqual(res2['ids'], None)
self.assertEqual(len(res2['messages']), 1)
self.assertEqual(
res2['messages'][0]['message'],
'User (ID: %s) is not allowed to import data in '
'model ir.model.access.' % self.user_test.id)

10
base_import_security_group/views/base_import.xml

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<template id="assets_backend" name="base_import_security_group assets" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<script type="text/javascript" src="/base_import_security_group/static/src/js/import.js"></script>
</xpath>
</template>
</odoo>
Loading…
Cancel
Save