[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
|
||||
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']]
|
||||
|
|
|
@ -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 = [{}]
|
||||
|
|
Loading…
Reference in New Issue