如何限制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
相关产品推荐
相关产品推荐

