[IMP] prevent edition of page if groups which current user doesn't have
If the current view uses @groups attributes (possibly in called templates), the corresponding elements are rendered to a void (empty string in qweb). If said user can edit the page, does so and saves a view section in which there's a @groups to which he has no access, the element[@groups] is completely removed from the template once saved, losing it. If QWeb encounters an @groups to which the current user has no right during rendering, have it request a no-RTE page, so the user can not RTE-edit the page (or drop snippets in it).
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
|
||||
var website = openerp.website;
|
||||
var _t = openerp._t;
|
||||
website.no_editor = !!$(document.documentElement).data('editable-no-editor');
|
||||
|
||||
website.add_template_file('/website/static/src/xml/website.editor.xml');
|
||||
website.dom_ready.done(function () {
|
||||
@@ -496,6 +497,17 @@
|
||||
this.$('#website-top-edit').hide();
|
||||
this.$('#website-top-view').show();
|
||||
|
||||
if (website.no_editor) {
|
||||
var help_text = $(document.documentElement).data('editable-no-editor');
|
||||
this.$('button[data-action=edit]')
|
||||
.prop('disabled', website.no_editor)
|
||||
.parent()
|
||||
// help must be set on form above button because it does
|
||||
// not appear on disabled button
|
||||
.attr('title', help_text);
|
||||
}
|
||||
|
||||
|
||||
$('.dropdown-toggle').dropdown();
|
||||
this.customize_setup();
|
||||
|
||||
|
||||
@@ -14,7 +14,8 @@
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<form class="navbar-form navbar-left">
|
||||
<button type="button" data-action="edit" class="btn btn-primary hidden">Edit</button>
|
||||
<button type="button" data-action="edit"
|
||||
class="btn btn-primary hidden">Edit</button>
|
||||
</form>
|
||||
</div>
|
||||
<div class="collapse navbar-collapse navbar-edit-collapse">
|
||||
|
||||
@@ -59,6 +59,7 @@
|
||||
<html t-att-lang="lang and lang.replace('_', '-')"
|
||||
t-att-data-website-id="website.id if editable else None"
|
||||
t-att-data-editable="'1' if editable else None"
|
||||
t-att-data-editable-no-editor="editable_no_editor or None"
|
||||
t-att-data-translatable="'1' if translatable else None"
|
||||
t-att-data-view-xmlid="xmlid if editable else None"
|
||||
t-att-data-main-object="repr(main_object) if editable else None"
|
||||
@@ -179,8 +180,10 @@
|
||||
<xpath expr="//body" position="inside">
|
||||
<div id="website-top-navbar-placeholder" class="navbar navbar-inverse navbar-fixed-top hidden-xs">
|
||||
<div class="navbar-header">
|
||||
<form class="navbar-form navbar-left">
|
||||
<button type="button" class="btn btn-primary">Edit</button>
|
||||
<form class="navbar-form navbar-left" title="editable_no_editor or None">
|
||||
<button type="button" class="btn btn-primary"
|
||||
disabled="'disabled' if editable_no_editor else None"
|
||||
>Edit</button>
|
||||
</form>
|
||||
</div>
|
||||
<div class="collapse navbar-collapse navbar-edit-collapse">
|
||||
|
||||
@@ -256,9 +256,15 @@ class QWeb(orm.AbstractModel):
|
||||
cr = qwebcontext.get('request') and qwebcontext['request'].cr or None
|
||||
uid = qwebcontext.get('request') and qwebcontext['request'].uid or None
|
||||
can_see = self.user_has_groups(cr, uid, groups=attribute_value) if cr and uid else False
|
||||
if not can_see:
|
||||
return ''
|
||||
continue
|
||||
if can_see:
|
||||
continue
|
||||
if qwebcontext.get('editable') and not qwebcontext.get('editable_no_editor'):
|
||||
errmsg = _("Editor disabled because some content can not be seen by a user who does not belong to the groups %s")
|
||||
raise openerp.http.Retry(
|
||||
_("User does not belong to groups %s") % attribute_value, {
|
||||
'editable_no_editor': errmsg % attribute_value
|
||||
})
|
||||
return ''
|
||||
|
||||
if isinstance(attribute_value, unicode):
|
||||
attribute_value = attribute_value.encode("utf8")
|
||||
@@ -302,7 +308,7 @@ class QWeb(orm.AbstractModel):
|
||||
for current_node in element.childNodes:
|
||||
try:
|
||||
g_inner.append(self.render_node(current_node, qwebcontext))
|
||||
except QWebException:
|
||||
except (QWebException, openerp.http.Retry):
|
||||
raise
|
||||
except Exception:
|
||||
template = qwebcontext.get('__template__')
|
||||
|
||||
Reference in New Issue
Block a user