django - 在 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
中的对象,因此不知道如何提取用户数据。有办法吗?
解决方案
您可以使用 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']
推荐阅读
- node.js - 拆分 Goole-Play-Scraper 结果
- logging - 在 boto3 中更改 urllib3 的日志记录级别
- python - Spotify Web API - 错误 400,在创建播放列表时没有正文
- django - 在 django ORM 查询中注释期间获取长名称
- cmd - 如何在cmd中删除以“ - Copy”结尾的重复文件
- android - 在不裁剪或缩放的情况下调整壁纸大小以适应屏幕?
- playframework - 如何用ebean映射枚举?
- python - 基于熊猫数据框中指定列的分组
- javascript - 在javascript中发送多个数据
- spring - 方法签名无法解析 Java 中的 kotlin