diff --git a/base_concurrency/__init__.py b/base_concurrency/__init__.py deleted file mode 100644 index 364b1d0b3e9..00000000000 --- a/base_concurrency/__init__.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# Author: Matthieu Dietrich -# Copyright 2015 Camptocamp SA -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -from . import res_users diff --git a/base_concurrency/__openerp__.py b/base_concurrency/__openerp__.py deleted file mode 100644 index 617ccfc969a..00000000000 --- a/base_concurrency/__openerp__.py +++ /dev/null @@ -1,44 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# Author: Matthieu Dietrich -# Copyright 2015 Camptocamp SA -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -{"name": "Base Concurrency", - "version": "8.0.1.0.0", - "author": "Camptocamp,Odoo Community Association (OCA)", - "category": "Specific Module", - "description": """ -Module to regroup all workarounds/fixes to avoid concurrency issues in SQL. - -* res.users login_date: -the login date is now separated from res.users; on long transactions, -"re-logging" by opening a new tab changes the current res.user row, -which creates concurrency issues with PostgreSQL in the first transaction. - -This creates a new table and a function field to avoid this. In order to -avoid breaking modules which access via SQL the login_date column, a cron -(inactive by default) can be used to sync data. -""", - "website": "http://camptocamp.com", - "depends": ['base'], - "data": ['security/ir.model.access.csv', - 'cron.xml'], - "auto_install": False, - 'installable': False - } diff --git a/base_concurrency/cron.xml b/base_concurrency/cron.xml deleted file mode 100644 index a134f7387c2..00000000000 --- a/base_concurrency/cron.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - Synchronize login dates in res.users - 1 - - - 1 - days - -1 - - - - - - - diff --git a/base_concurrency/i18n/de.po b/base_concurrency/i18n/de.po deleted file mode 100644 index 44b9e2ada24..00000000000 --- a/base_concurrency/i18n/de.po +++ /dev/null @@ -1,63 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * base_concurrency -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: server-tools (8.0)\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-09-29 11:14+0000\n" -"PO-Revision-Date: 2015-09-18 13:54+0000\n" -"Last-Translator: <>\n" -"Language-Team: German (http://www.transifex.com/oca/OCA-server-tools-8-0/language/de/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Language: de\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#. module: base_concurrency -#: field:res.users.login,create_uid:0 -msgid "Created by" -msgstr "Erstellt von" - -#. module: base_concurrency -#: field:res.users.login,create_date:0 -msgid "Created on" -msgstr "Erstellt am:" - -#. module: base_concurrency -#: field:res.users.login,id:0 -msgid "ID" -msgstr "ID" - -#. module: base_concurrency -#: field:res.users.login,write_uid:0 -msgid "Last Updated by" -msgstr "Zuletzt aktualisiert von" - -#. module: base_concurrency -#: field:res.users.login,write_date:0 -msgid "Last Updated on" -msgstr "Zuletzt aktualisiert am" - -#. module: base_concurrency -#: field:res.users.login,login_dt:0 -msgid "Latest connection" -msgstr "" - -#. module: base_concurrency -#: sql_constraint:res.users.login:0 -msgid "The user can only have one login line!" -msgstr "" - -#. module: base_concurrency -#: field:res.users.login,user_id:0 -msgid "User" -msgstr "Benutzer" - -#. module: base_concurrency -#: model:ir.model,name:base_concurrency.model_res_users -msgid "Users" -msgstr "Benutzer" diff --git a/base_concurrency/i18n/en.po b/base_concurrency/i18n/en.po deleted file mode 100644 index e8ad161dcf5..00000000000 --- a/base_concurrency/i18n/en.po +++ /dev/null @@ -1,63 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * base_concurrency -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: server-tools (8.0)\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-09-29 11:14+0000\n" -"PO-Revision-Date: 2015-09-18 13:54+0000\n" -"Last-Translator: OCA Transbot \n" -"Language-Team: English (http://www.transifex.com/oca/OCA-server-tools-8-0/language/en/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Language: en\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#. module: base_concurrency -#: field:res.users.login,create_uid:0 -msgid "Created by" -msgstr "Created by" - -#. module: base_concurrency -#: field:res.users.login,create_date:0 -msgid "Created on" -msgstr "Created on" - -#. module: base_concurrency -#: field:res.users.login,id:0 -msgid "ID" -msgstr "ID" - -#. module: base_concurrency -#: field:res.users.login,write_uid:0 -msgid "Last Updated by" -msgstr "Last Updated by" - -#. module: base_concurrency -#: field:res.users.login,write_date:0 -msgid "Last Updated on" -msgstr "Last Updated on" - -#. module: base_concurrency -#: field:res.users.login,login_dt:0 -msgid "Latest connection" -msgstr "Latest connection" - -#. module: base_concurrency -#: sql_constraint:res.users.login:0 -msgid "The user can only have one login line!" -msgstr "The user can only have one login line!" - -#. module: base_concurrency -#: field:res.users.login,user_id:0 -msgid "User" -msgstr "User" - -#. module: base_concurrency -#: model:ir.model,name:base_concurrency.model_res_users -msgid "Users" -msgstr "Users" diff --git a/base_concurrency/i18n/es.po b/base_concurrency/i18n/es.po deleted file mode 100644 index 3ba0dfb4630..00000000000 --- a/base_concurrency/i18n/es.po +++ /dev/null @@ -1,63 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * base_concurrency -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: server-tools (8.0)\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-09-29 11:14+0000\n" -"PO-Revision-Date: 2015-09-18 13:54+0000\n" -"Last-Translator: <>\n" -"Language-Team: Spanish (http://www.transifex.com/oca/OCA-server-tools-8-0/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#. module: base_concurrency -#: field:res.users.login,create_uid:0 -msgid "Created by" -msgstr "Creado por" - -#. module: base_concurrency -#: field:res.users.login,create_date:0 -msgid "Created on" -msgstr "Creado en" - -#. module: base_concurrency -#: field:res.users.login,id:0 -msgid "ID" -msgstr "ID" - -#. module: base_concurrency -#: field:res.users.login,write_uid:0 -msgid "Last Updated by" -msgstr "Última actualización de" - -#. module: base_concurrency -#: field:res.users.login,write_date:0 -msgid "Last Updated on" -msgstr "Última actualización en" - -#. module: base_concurrency -#: field:res.users.login,login_dt:0 -msgid "Latest connection" -msgstr "" - -#. module: base_concurrency -#: sql_constraint:res.users.login:0 -msgid "The user can only have one login line!" -msgstr "" - -#. module: base_concurrency -#: field:res.users.login,user_id:0 -msgid "User" -msgstr "Usuario" - -#. module: base_concurrency -#: model:ir.model,name:base_concurrency.model_res_users -msgid "Users" -msgstr "Usuarios" diff --git a/base_concurrency/i18n/fr.po b/base_concurrency/i18n/fr.po deleted file mode 100644 index 42be06688f5..00000000000 --- a/base_concurrency/i18n/fr.po +++ /dev/null @@ -1,63 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * base_concurrency -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: server-tools (8.0)\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-09-29 11:14+0000\n" -"PO-Revision-Date: 2015-09-18 13:54+0000\n" -"Last-Translator: <>\n" -"Language-Team: French (http://www.transifex.com/oca/OCA-server-tools-8-0/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -#. module: base_concurrency -#: field:res.users.login,create_uid:0 -msgid "Created by" -msgstr "Créé par" - -#. module: base_concurrency -#: field:res.users.login,create_date:0 -msgid "Created on" -msgstr "Créé le" - -#. module: base_concurrency -#: field:res.users.login,id:0 -msgid "ID" -msgstr "ID" - -#. module: base_concurrency -#: field:res.users.login,write_uid:0 -msgid "Last Updated by" -msgstr "Dernière mise à jour par" - -#. module: base_concurrency -#: field:res.users.login,write_date:0 -msgid "Last Updated on" -msgstr "Dernière mise à jour le" - -#. module: base_concurrency -#: field:res.users.login,login_dt:0 -msgid "Latest connection" -msgstr "" - -#. module: base_concurrency -#: sql_constraint:res.users.login:0 -msgid "The user can only have one login line!" -msgstr "" - -#. module: base_concurrency -#: field:res.users.login,user_id:0 -msgid "User" -msgstr "Utilisateur" - -#. module: base_concurrency -#: model:ir.model,name:base_concurrency.model_res_users -msgid "Users" -msgstr "Utilisateurs" diff --git a/base_concurrency/i18n/it.po b/base_concurrency/i18n/it.po deleted file mode 100644 index 304e5629112..00000000000 --- a/base_concurrency/i18n/it.po +++ /dev/null @@ -1,63 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * base_concurrency -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: server-tools (8.0)\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-09-29 11:14+0000\n" -"PO-Revision-Date: 2015-09-18 13:54+0000\n" -"Last-Translator: <>\n" -"Language-Team: Italian (http://www.transifex.com/oca/OCA-server-tools-8-0/language/it/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Language: it\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#. module: base_concurrency -#: field:res.users.login,create_uid:0 -msgid "Created by" -msgstr "" - -#. module: base_concurrency -#: field:res.users.login,create_date:0 -msgid "Created on" -msgstr "" - -#. module: base_concurrency -#: field:res.users.login,id:0 -msgid "ID" -msgstr "" - -#. module: base_concurrency -#: field:res.users.login,write_uid:0 -msgid "Last Updated by" -msgstr "" - -#. module: base_concurrency -#: field:res.users.login,write_date:0 -msgid "Last Updated on" -msgstr "" - -#. module: base_concurrency -#: field:res.users.login,login_dt:0 -msgid "Latest connection" -msgstr "" - -#. module: base_concurrency -#: sql_constraint:res.users.login:0 -msgid "The user can only have one login line!" -msgstr "" - -#. module: base_concurrency -#: field:res.users.login,user_id:0 -msgid "User" -msgstr "Utente" - -#. module: base_concurrency -#: model:ir.model,name:base_concurrency.model_res_users -msgid "Users" -msgstr "" diff --git a/base_concurrency/i18n/pt_BR.po b/base_concurrency/i18n/pt_BR.po deleted file mode 100644 index a3011612b81..00000000000 --- a/base_concurrency/i18n/pt_BR.po +++ /dev/null @@ -1,64 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * base_concurrency -# -# Translators: -# Armando Vulcano Junior , 2015 -msgid "" -msgstr "" -"Project-Id-Version: server-tools (8.0)\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-09-29 11:14+0000\n" -"PO-Revision-Date: 2015-09-18 21:01+0000\n" -"Last-Translator: Armando Vulcano Junior \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/oca/OCA-server-tools-8-0/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -#. module: base_concurrency -#: field:res.users.login,create_uid:0 -msgid "Created by" -msgstr "Criado por" - -#. module: base_concurrency -#: field:res.users.login,create_date:0 -msgid "Created on" -msgstr "Criado em" - -#. module: base_concurrency -#: field:res.users.login,id:0 -msgid "ID" -msgstr "Identificação" - -#. module: base_concurrency -#: field:res.users.login,write_uid:0 -msgid "Last Updated by" -msgstr "Última atualização por" - -#. module: base_concurrency -#: field:res.users.login,write_date:0 -msgid "Last Updated on" -msgstr "Última atualização em" - -#. module: base_concurrency -#: field:res.users.login,login_dt:0 -msgid "Latest connection" -msgstr "Última conexão" - -#. module: base_concurrency -#: sql_constraint:res.users.login:0 -msgid "The user can only have one login line!" -msgstr "O usuário pode ter apenas uma linha de login!" - -#. module: base_concurrency -#: field:res.users.login,user_id:0 -msgid "User" -msgstr "Usuário" - -#. module: base_concurrency -#: model:ir.model,name:base_concurrency.model_res_users -msgid "Users" -msgstr "Usuários" diff --git a/base_concurrency/i18n/ru.po b/base_concurrency/i18n/ru.po deleted file mode 100644 index 5b0bf5eb04e..00000000000 --- a/base_concurrency/i18n/ru.po +++ /dev/null @@ -1,63 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * base_concurrency -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: server-tools (8.0)\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-09-29 11:14+0000\n" -"PO-Revision-Date: 2015-09-18 13:54+0000\n" -"Last-Translator: <>\n" -"Language-Team: Russian (http://www.transifex.com/oca/OCA-server-tools-8-0/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Language: ru\n" -"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" - -#. module: base_concurrency -#: field:res.users.login,create_uid:0 -msgid "Created by" -msgstr "" - -#. module: base_concurrency -#: field:res.users.login,create_date:0 -msgid "Created on" -msgstr "" - -#. module: base_concurrency -#: field:res.users.login,id:0 -msgid "ID" -msgstr "" - -#. module: base_concurrency -#: field:res.users.login,write_uid:0 -msgid "Last Updated by" -msgstr "" - -#. module: base_concurrency -#: field:res.users.login,write_date:0 -msgid "Last Updated on" -msgstr "" - -#. module: base_concurrency -#: field:res.users.login,login_dt:0 -msgid "Latest connection" -msgstr "" - -#. module: base_concurrency -#: sql_constraint:res.users.login:0 -msgid "The user can only have one login line!" -msgstr "" - -#. module: base_concurrency -#: field:res.users.login,user_id:0 -msgid "User" -msgstr "Пользователь" - -#. module: base_concurrency -#: model:ir.model,name:base_concurrency.model_res_users -msgid "Users" -msgstr "" diff --git a/base_concurrency/i18n/sl.po b/base_concurrency/i18n/sl.po deleted file mode 100644 index c9517c8b6ef..00000000000 --- a/base_concurrency/i18n/sl.po +++ /dev/null @@ -1,64 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * base_concurrency -# -# Translators: -# Matjaž Mozetič , 2015 -msgid "" -msgstr "" -"Project-Id-Version: server-tools (8.0)\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-09-29 11:14+0000\n" -"PO-Revision-Date: 2015-09-24 11:47+0000\n" -"Last-Translator: Matjaž Mozetič \n" -"Language-Team: Slovenian (http://www.transifex.com/oca/OCA-server-tools-8-0/language/sl/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Language: sl\n" -"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" - -#. module: base_concurrency -#: field:res.users.login,create_uid:0 -msgid "Created by" -msgstr "Ustvaril" - -#. module: base_concurrency -#: field:res.users.login,create_date:0 -msgid "Created on" -msgstr "Ustvarjeno" - -#. module: base_concurrency -#: field:res.users.login,id:0 -msgid "ID" -msgstr "ID" - -#. module: base_concurrency -#: field:res.users.login,write_uid:0 -msgid "Last Updated by" -msgstr "Zadnjič posodobil" - -#. module: base_concurrency -#: field:res.users.login,write_date:0 -msgid "Last Updated on" -msgstr "Zadnjič posodobljeno" - -#. module: base_concurrency -#: field:res.users.login,login_dt:0 -msgid "Latest connection" -msgstr "Zadnja povezava" - -#. module: base_concurrency -#: sql_constraint:res.users.login:0 -msgid "The user can only have one login line!" -msgstr "Uporabnik ima lahko le eno prijavno povezavo!" - -#. module: base_concurrency -#: field:res.users.login,user_id:0 -msgid "User" -msgstr "Uporabnik" - -#. module: base_concurrency -#: model:ir.model,name:base_concurrency.model_res_users -msgid "Users" -msgstr "Uporabniki" diff --git a/base_concurrency/res_users.py b/base_concurrency/res_users.py deleted file mode 100644 index 4ceeaeff5c2..00000000000 --- a/base_concurrency/res_users.py +++ /dev/null @@ -1,137 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# Author: Matthieu Dietrich -# Copyright 2015 Camptocamp SA -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## -import logging -import psycopg2 -import openerp.exceptions -from openerp import SUPERUSER_ID -from openerp.osv import orm, fields - -_logger = logging.getLogger(__name__) - - -# New class to store the login date -class ResUsersLogin(orm.Model): - - _name = 'res.users.login' - _columns = { - 'user_id': fields.many2one('res.users', 'User', required=True), - 'login_dt': fields.date('Latest connection'), - } - - _sql_constraints = [ - ('user_id_unique', - 'unique(user_id)', - 'The user can only have one login line!') - ] - - # Cron method - def cron_sync_login_date(self, cr, uid, context=None): - # Simple SQL query to update the original login_date column. - try: - cr.execute("UPDATE res_users SET login_date = " - "(SELECT login_dt FROM res_users_login " - "WHERE res_users_login.user_id = res_users.id)") - cr.commit() - except Exception as e: - cr.rollback() - _logger.exception('Could not synchronize login dates: %s', e) - - return True - - -class ResUsers(orm.Model): - - _inherit = 'res.users' - - # Function to retrieve the login date from the res.users object - # (used in some functions, and the user state) - def _get_login_date(self, cr, uid, ids, name, args, context=None): - res = {} - user_login_obj = self.pool['res.users.login'] - for user_id in ids: - login_ids = user_login_obj.search( - cr, uid, [('user_id', '=', user_id)], limit=1, - context=context) - if len(login_ids) == 0: - res[user_id] = False - else: - login = user_login_obj.browse(cr, uid, login_ids[0], - context=context) - res[user_id] = login.login_dt - return res - - _columns = { - 'login_date': fields.function(_get_login_date, - string='Latest connection', - type='date', select=1, - readonly=True, store=False, - nodrop=True), - } - - # Re-defining the login function in order to use the new table - def _login(self, db, login, password): - if not password: - return False - user_id = False - cr = self.pool.cursor() - try: - # check if user exists - res = self.search(cr, SUPERUSER_ID, [('login', '=', login)]) - if res: - user_id = res[0] - try: - # check credentials - self.check_credentials(cr, user_id, password) - except openerp.exceptions.AccessDenied: - _logger.info("Login failed for db:%s login:%s", db, login) - user_id = False - - if user_id: - try: - cr.execute("SELECT login_dt " - "FROM res_users_login " - "WHERE user_id=%s " - "FOR UPDATE NOWAIT", (user_id,), - log_exceptions=False) - # create login line if not existing - result = cr.fetchone() - if result: - cr.execute("UPDATE res_users_login " - "SET login_dt = now() " - "AT TIME ZONE 'UTC' " - "WHERE user_id=%s", (user_id,)) - else: - cr.execute("INSERT INTO res_users_login " - "(user_id, login_dt) " - "VALUES (%s, now())", (user_id,)) - cr.commit() - except psycopg2.OperationalError: - _logger.warning("Failed to update last_login " - "for db:%s login:%s", - db, login, exc_info=True) - cr.rollback() - except Exception as e: - _logger.exception('Login exception: %s', e) - user_id = False - finally: - cr.close() - - return user_id diff --git a/base_concurrency/security/ir.model.access.csv b/base_concurrency/security/ir.model.access.csv deleted file mode 100644 index 922391f56d1..00000000000 --- a/base_concurrency/security/ir.model.access.csv +++ /dev/null @@ -1,2 +0,0 @@ -id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -"access_res_users_login_all","res_users_login all","model_res_users_login",,1,0,0,0