这是一个不完整的答案。它将为非管理员用户隐藏Preferences 菜单项:
xml:
<t t-extend="UserMenu">
<t t-jquery="div.dropdown-menu.dropdown-menu-right" t-operation="replace">
<div class="dropdown-menu dropdown-menu-right" role="menu">
<a role="menuitem" href="#" data-menu="shortcuts" class="dropdown-item d-none d-md-inline-block">Shortcuts</a>
<a role="menuitem" href="#" data-menu="settings" class="dropdown-item" id="preference_menuitem">Preferences</a>
<a role="menuitem" href="#" data-menu="logout" class="dropdown-item">Log out</a>
</div>
</t>
</t>
js:
odoo.define('pos_custom_ui.custom_menuitems', function (require) {
"use strict";
var config = require('web.config');
var UserMenu = require('web.UserMenu');
UserMenu.include({
start: function () {
var self = this;
var session = this.getSession();
if (!session.is_admin){
this.$('#preference_menuitem').hide();
}
this.$el.on('click', '[data-menu]', function (ev) {
ev.preventDefault();
var menu = $(this).data('menu');
self['_onMenu' + menu.charAt(0).toUpperCase() + menu.slice(1)]();
});
return this._super.apply(this, arguments).then(function () {
var $avatar = self.$('.oe_topbar_avatar');
if (!session.uid) {
$avatar.attr('src', $avatar.data('default-src'));
return Promise.resolve();
}
var topbar_name = session.name;
if (config.isDebug()) {
topbar_name = _.str.sprintf("%s (%s)", topbar_name, session.db);
}
self.$('.oe_topbar_name').text(topbar_name);
var avatar_src = session.url('/web/image', {
model:'res.users',
field: 'image_128',
id: session.uid,
});
$avatar.attr('src', avatar_src);
});
},
});
});
在web.assets_backend 中包含js 文件:
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="custom_dashboard" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<script type="text/javascript" src="/pos_custom_ui/static/src/js/custom_menuitems.js"></script>
</xpath>
</template>
</odoo>