You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何限制Wagtail的Site Admin菜单项仅对Staff权限用户可见?

好问题!要给这个Django Admin设置菜单项加上仅Staff可见的限制,你只需要给MenuItem添加一个权限检查逻辑就行。Wagtail提供了很灵活的方式来控制菜单项的显示,这里有两种简洁的实现方案:

方案1:直接使用is_shown参数(推荐快速实现)

你可以在创建MenuItem时,通过is_shown参数传入一个判断用户权限的函数。这个函数会接收当前请求对象,返回布尔值来决定菜单项是否显示:

from wagtail import hooks
from wagtail.admin.menu import MenuItem
from django.utils.translation import gettext_lazy as _

@hooks.register('register_settings_menu_item')
def register_django_admin_menu_item():
    def show_for_staff(request):
        # 利用Django内置的用户属性判断是否为Staff
        return request.user.is_staff
    
    return MenuItem(
        _('Site Admin'),
        '/django-admin',
        classnames='icon icon-wagtail-inverse',
        order=20000,
        is_shown=show_for_staff  # 绑定权限判断逻辑
    )

方案2:自定义MenuItem子类(适合复用场景)

如果之后你有多个菜单项都需要Staff权限限制,可以创建一个自定义的MenuItem子类,重写它的is_shown方法:

from wagtail import hooks
from wagtail.admin.menu import MenuItem
from django.utils.translation import gettext_lazy as _

class StaffOnlyMenuItem(MenuItem):
    def is_shown(self, request):
        # 统一的Staff权限检查逻辑
        return request.user.is_staff

@hooks.register('register_settings_menu_item')
def register_django_admin_menu_item():
    return StaffOnlyMenuItem(
        _('Site Admin'),
        '/django-admin',
        classnames='icon icon-wagtail-inverse',
        order=20000
    )

补充说明

  • request.user.is_staff是Django内置的属性,正好对应后台Staff用户的标识,完全符合你的需求。
  • 别忘了确保Django Admin本身的访问权限配置正确(默认情况下只有Staff用户能访问Admin,所以这个限制和Admin本身的权限是匹配的)。

内容的提问来源于stack exchange,提问作者SalahAdDin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:59:08