首页 > 解决方案 > Wagtail 按用户权限隐藏/显示菜单项

问题描述

如何在 wagtail CMS 中隐藏显示菜单:这是我在 register_admin_menu_item 钩子上的代码blog/wagtail_hooks.py

    from wagtail.core import hooks
    from wagtail.admin.menu import MenuItem
    @hooks.register('register_admin_menu_item')
    def register_custom_admin_menu_item():
        return MenuItem(_('Site Admin'), reverse('admin_menu'), classnames='icon icon-folder-inverse',
         order=20000)

标签: wagtailwagtail-snippet

解决方案


为了在菜单上施加访问权限,我们可以创建自定义MenuItem类并重写is_shown方法,如下所示:

        class CustomAdminMenuItem(MenuItem):
        def is_shown(self, request):
            return request.user.is_staff

现在使用它CustomAdminMenuItem 而不是 MenuItem ,例如:

    from wagtail.core import hooks
    from wagtail.admin.menu import MenuItem
    @hooks.register('register_admin_menu_item')
    def register_custom_admin_menu_item():
        return CustomAdminMenuItem(_('Site Admin'), reverse('admin_menu'), classnames='icon icon-folder-inverse',
         order=20000)

has_perm您也可以使用内部 is_shown来实现自定义权限检查,例如:

    class CustomMenuItem(MenuItem):
        def is_shown(self, request):
            return (
                request.user.has_perm('wagtailsearchpromotions.add_searchpromotion') or
                request.user.has_perm('wagtailsearchpromotions.change_searchpromotion') or
                request.user.has_perm('wagtailsearchpromotions.delete_searchpromotion')
            )

有关更多详细信息,请访问此处的源代码和此处的 文档。


推荐阅读