在使用自定义菜单栏以后Django的默认权限管理菜单栏就不生效了,这时候想做到隐藏菜单栏需要设置入站中间件来控制。
菜单栏引用的是文档里的 simpleUI自定义菜单
下面是操作实例
- 先在admin所在的app目录下新建一个middleware.py文件
from django.conf import settings
from django.utils.deprecation import MiddlewareMixin
class FilterMenu(MiddlewareMixin):
def process_request(self, request): # noqa
if "/admin/" in request.path:
print("访问地址: ", request.path)
print("登陆用户: ", request.user)
groups = request.user.groups.all()
print("用户组: ", groups)
# settings.SIMPLEUI_CONFIG['menu_display'] = []
for group in groups:
# 可以根据用户组来进行菜单栏管理,可以设置个字典进行配置
# 用户组名和菜单名对应,然后 settings.SIMPLEUI_CONFIG['menu_display'] .append(dict_menu[group.name])就行
print(group.name)
# 这里是根据用户名指定不同的菜单
if request.user.username == 'user123':
settings.SIMPLEUI_CONFIG['menu_display'] = ['Simpleui', '测试']
print(settings.SIMPLEUI_CONFIG)
- 把中间件加入到settings.py
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'app1.middleware.FilterMenu', # 放在AuthenticationMiddleware后面都行,这里的文件名地址注意下就可以了
]
好了,就是这么简单。
如果要对二级和三级菜单进行管理,那就得对 settings.SIMPLEUI_CONFIG['menus']
进行重新赋值,照着菜单栏的数据结构赋值就行