[FIX] force url enumeration/generation to be performed as 'public' user

bzr revid: xmo@openerp.com-20131125100813-fln1j714m2h85h09
This commit is contained in:
Xavier Morel 2013-11-25 11:08:13 +01:00
parent 4456594d40
commit 3542a27f9c
2 changed files with 11 additions and 12 deletions

View File

@ -38,25 +38,22 @@ class ModelConverter(ir.ir_http.ModelConverter):
id, name = value
return "%s-%d" % (slugify(name), id)
def generate(self, query=None):
def generate(self, cr, uid, query=None, context=None):
return request.registry[self.model].name_search(
request.cr, request.uid,
name=query or '',
context=request.context)
cr, uid, name=query or '', context=context)
class PageConverter(werkzeug.routing.PathConverter):
""" Only point of this converter is to bundle pages enumeration logic
Sads got: no way to get the view's human-readable name even if one exists
"""
def generate(self, query=None):
def generate(self, cr, uid, query=None, context=None):
View = request.registry['ir.ui.view']
views = View.search_read(
request.cr, request.uid, [['page', '=', True]],
fields=[], order='name', context=request.context)
cr, uid, [['page', '=', True]],
fields=[], order='name', context=context)
xids = View.get_external_id(
request.cr, request.uid, [view['id'] for view in views],
context=request.context)
cr, uid, [view['id'] for view in views], context=context)
for view in views:
xid = xids[view['id']]

View File

@ -386,6 +386,8 @@ class website(osv.osv):
:rtype: list({name: str, url: str})
"""
router = request.httprequest.app.get_db_router(request.db)
# Force enumeration to be performed as public user
uid = self.get_public_user(cr, uid, context=context).id
for rule in router.iter_rules():
if not self.rule_is_enumerable(rule):
continue
@ -396,10 +398,10 @@ class website(osv.osv):
# allow single converter as decided by fp, checked by
# rule_is_enumerable
[(name, converter)] = converters.items()
# FIXME: perform generation as public user
converter_values = converter.generate(
request.cr, uid, query=query_string, context=context)
generated = ({k: v} for k, v in itertools.izip(
itertools.repeat(name),
converter.generate(query=query_string)))
itertools.repeat(name), converter_values))
else:
# force single iteration for literal urls
generated = [{}]