Wagtail Hide / Show пункт меню по разрешениям пользователя - PullRequest
0 голосов
/ 20 мая 2018

Как скрыть-показать меню в трясогузке 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)

1 Ответ

0 голосов
/ 20 мая 2018

Для наложения доступа в меню мы можем создать собственный класс 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')
            )

Для получения более подробной информации посетите исходный код здесь и doc здесь .

...