当用户不是任何组的成员(该组必须具有外部 ID)时,您可以添加新字段
group_ids
并覆盖 _compute_visible 将 is_visible
字段设置为 False
示例:
class Menu(models.Model):
_inherit = "website.menu"
group_ids = fields.Many2many("res.groups")
def _compute_visible(self):
for menu in self:
visible = True
group_external_ids = [xmlid for xmlid in menu.group_ids.get_external_id().values() if xmlid]
if menu.group_ids and group_external_ids and not menu.user_has_groups(",".join(group_external_ids)):
visible = False
elif menu.page_id and not menu.user_has_groups('base.group_user'):
page_sudo = menu.page_id.sudo()
if (not page_sudo.is_visible
or (not page_sudo.view_id._handle_visibility(do_raise=False)
and page_sudo.view_id._get_cached_visibility() != "password")):
visible = False
menu.is_visible = visible
*没有外部 xml id 的组应该被忽略