首页 > 解决方案 > 在 Wagtail 如何为某些用户禁用某些管理菜单项?

问题描述

对于用户组,我想禁用一些菜单项。我想我会使用以下内容:

from wagtail.contrib.modeladmin.options import ModelAdmin as WModelAdmin

class WPartnerAdmin(WModelAdmin):
    ...
    def get_menu_item(self, order=None):
        menu_item = super().get_menu_item(order=order)
        # if (user_discrimination_logic):
        #    menu_item.is_shown = lambda *a: False
        return menu_item

但似乎我无权访问Wagtail ModelAdminrequest中的对象,因此不知道如何提取用户数据。有办法吗?

标签: djangopython-3.xwagtail

解决方案


您可以使用 Wagtail 的 Hooks 功能,尤其是construct_main_menu挂钩:

在相应的应用程序中创建一个wagtail_hooks.py文件,内容如下(来自Wagtail Docs):

from wagtail.core import hooks

@hooks.register('construct_main_menu')
def hide_explorer_menu_item_from_frank(request, menu_items):
  if request.user.username == 'frank':
    menu_items[:] = [item for item in menu_items if item.name != 'explorer']

推荐阅读