[FIX] force url enumeration/generation to be performed as 'public' user
bzr revid: xmo@openerp.com-20131125100813-fln1j714m2h85h09
This commit is contained in:
parent
4456594d40
commit
3542a27f9c
|
@ -38,25 +38,22 @@ class ModelConverter(ir.ir_http.ModelConverter):
|
||||||
id, name = value
|
id, name = value
|
||||||
return "%s-%d" % (slugify(name), id)
|
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(
|
return request.registry[self.model].name_search(
|
||||||
request.cr, request.uid,
|
cr, uid, name=query or '', context=context)
|
||||||
name=query or '',
|
|
||||||
context=request.context)
|
|
||||||
|
|
||||||
class PageConverter(werkzeug.routing.PathConverter):
|
class PageConverter(werkzeug.routing.PathConverter):
|
||||||
""" Only point of this converter is to bundle pages enumeration logic
|
""" 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
|
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']
|
View = request.registry['ir.ui.view']
|
||||||
views = View.search_read(
|
views = View.search_read(
|
||||||
request.cr, request.uid, [['page', '=', True]],
|
cr, uid, [['page', '=', True]],
|
||||||
fields=[], order='name', context=request.context)
|
fields=[], order='name', context=context)
|
||||||
xids = View.get_external_id(
|
xids = View.get_external_id(
|
||||||
request.cr, request.uid, [view['id'] for view in views],
|
cr, uid, [view['id'] for view in views], context=context)
|
||||||
context=request.context)
|
|
||||||
|
|
||||||
for view in views:
|
for view in views:
|
||||||
xid = xids[view['id']]
|
xid = xids[view['id']]
|
||||||
|
|
|
@ -386,6 +386,8 @@ class website(osv.osv):
|
||||||
:rtype: list({name: str, url: str})
|
:rtype: list({name: str, url: str})
|
||||||
"""
|
"""
|
||||||
router = request.httprequest.app.get_db_router(request.db)
|
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():
|
for rule in router.iter_rules():
|
||||||
if not self.rule_is_enumerable(rule):
|
if not self.rule_is_enumerable(rule):
|
||||||
continue
|
continue
|
||||||
|
@ -396,10 +398,10 @@ class website(osv.osv):
|
||||||
# allow single converter as decided by fp, checked by
|
# allow single converter as decided by fp, checked by
|
||||||
# rule_is_enumerable
|
# rule_is_enumerable
|
||||||
[(name, converter)] = converters.items()
|
[(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(
|
generated = ({k: v} for k, v in itertools.izip(
|
||||||
itertools.repeat(name),
|
itertools.repeat(name), converter_values))
|
||||||
converter.generate(query=query_string)))
|
|
||||||
else:
|
else:
|
||||||
# force single iteration for literal urls
|
# force single iteration for literal urls
|
||||||
generated = [{}]
|
generated = [{}]
|
||||||
|
|
Loading…
Reference in New Issue