summaryrefslogtreecommitdiff
path: root/addons/web/controllers
diff options
context:
space:
mode:
authorXavier Morel <xmo@odoo.com>2015-08-18 16:05:49 +0200
committerXavier Morel <xmo@odoo.com>2015-08-21 12:59:06 +0200
commit2ea5c3aeefb024b185c4fac889b8f5f0f958936a (patch)
tree30f405e07d8115103830694d202cb7841b59b74b /addons/web/controllers
parent3c4f88b30ab2a4f5b734a210fe9c81726b0d987a (diff)
[IMP] restrict modules to system_group
* listing of modules in website already bypassed session user * altered authenticated endpoint so it does the same * sudoed a few read accesses & name_get in groups * other accesses are list/form views, menu only accessible to system_user * new-API-ified some calls & unified listing of installed modules
Diffstat (limited to 'addons/web/controllers')
-rw-r--r--addons/web/controllers/main.py40
1 files changed, 13 insertions, 27 deletions
diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py
index 8d4553912b7..61bf1199a15 100644
--- a/addons/web/controllers/main.py
+++ b/addons/web/controllers/main.py
@@ -24,6 +24,8 @@ from cStringIO import StringIO
import babel.messages.pofile
import werkzeug.utils
import werkzeug.wrappers
+from openerp.api import Environment
+
try:
import xlwt
except ImportError:
@@ -144,47 +146,31 @@ def ensure_db(redirect='/web/database/selector'):
request.session.db = db
-def module_installed():
+def module_installed(environment):
# Candidates module the current heuristic is the /static dir
loadable = http.addons_manifest.keys()
- modules = {}
# Retrieve database installed modules
# TODO The following code should move to ir.module.module.list_installed_modules()
- Modules = request.session.model('ir.module.module')
+ Modules = environment['ir.module.module']
domain = [('state','=','installed'), ('name','in', loadable)]
- for module in Modules.search_read(domain, ['name', 'dependencies_id']):
- modules[module['name']] = []
- deps = module.get('dependencies_id')
- if deps:
- deps_read = request.session.model('ir.module.module.dependency').read(deps, ['name'])
- dependencies = [i['name'] for i in deps_read]
- modules[module['name']] = dependencies
+ modules = {
+ module.name: module.dependencies_id.mapped('name')
+ for module in Modules.search(domain)
+ }
sorted_modules = topological_sort(modules)
return sorted_modules
def module_installed_bypass_session(dbname):
- loadable = http.addons_manifest.keys()
- modules = {}
try:
registry = openerp.modules.registry.RegistryManager.get(dbname)
with registry.cursor() as cr:
- m = registry.get('ir.module.module')
- # TODO The following code should move to ir.module.module.list_installed_modules()
- domain = [('state','=','installed'), ('name','in', loadable)]
- ids = m.search(cr, 1, [('state','=','installed'), ('name','in', loadable)])
- for module in m.read(cr, 1, ids, ['name', 'dependencies_id']):
- modules[module['name']] = []
- deps = module.get('dependencies_id')
- if deps:
- deps_read = registry.get('ir.module.module.dependency').read(cr, 1, deps, ['name'])
- dependencies = [i['name'] for i in deps_read]
- modules[module['name']] = dependencies
- except Exception,e:
+ return module_installed(
+ environment=Environment(cr, openerp.SUPERUSER_ID, {}))
+ except Exception:
pass
- sorted_modules = topological_sort(modules)
- return sorted_modules
+ return {}
def module_boot(db=None):
server_wide_modules = openerp.conf.server_wide_modules or ['web']
@@ -816,7 +802,7 @@ class Session(http.Controller):
@http.route('/web/session/modules', type='json', auth="user")
def modules(self):
# return all installed modules. Web client is smart enough to not load a module twice
- return module_installed()
+ return module_installed(environment=request.env(user=openerp.SUPERUSER_ID))
@http.route('/web/session/save_session_action', type='json', auth="user")
def save_session_action(self, the_action):