simpleUI框架的菜单在不修改源码的情况下是无法做到根据权限隐藏和显示菜单的,如果有根据权限隐藏和显示对应菜单的需求,下面是修改步骤:
1、进入simpleUI源码中的simpletags.py目录为:
D:\XXX\venv\Lib\site-packages\simpleui\templatetags\simpletags.py(XXX为你的项目根目录)
2、去掉系统原有的菜单模块:
3、读取SIMPLEUI_CONFIG设置合并菜单处理:
key = 'system_keep'
if config and 'menus' in config:
total = config.get('menus')
group_permissions = len(context.request.user.get_group_permissions())
user_permissions = len(context.request.user.get_user_permissions())
if (group_permissions > user_permissions):
user_permissions = context.request.user.get_group_permissions().union(
context.request.user.get_user_permissions())
else:
user_permissions = context.request.user.get_group_permissions().union(
context.request.user.get_user_permissions())
for level_one_menu in total:
# 与一级菜单codename比对权限
if 'codename' not in level_one_menu or (
True in [(True if level_one_menu['codename'] in u_p else False) for u_p in
user_permissions]) == False:
if context.request.user.is_superuser == False:
continue
# 处理面包屑
if 'models' in level_one_menu:
del_models = list()
for level_two_menu in level_one_menu.get('models'):
if context.request.user.is_superuser:
pass
elif 'codename' not in level_two_menu.keys():
del_models.append(level_two_menu)
continue
elif ('codename' not in level_one_menu or 'codename' not in level_two_menu
or (level_one_menu['codename'] + '.' + level_two_menu[
'codename'] not in user_permissions)) and \
(level_one_menu['codename'] + '.view_' + level_two_menu['codename'] not in user_permissions) \
and (
level_one_menu['codename'] + '.add_' + level_two_menu['codename'] not in user_permissions) \
and (level_one_menu['codename'] + '.change_' + level_two_menu[
'codename'] not in user_permissions) \
and (level_one_menu['codename'] + '.delete_' + level_two_menu[
'codename'] not in user_permissions) \
and level_two_menu['codename'] not in user_permissions:
del_models.append(level_two_menu)
continue
level_two_menu['breadcrumbs'] = [{
'name': level_one_menu.get('name'),
'icon': level_one_menu.get('icon')
}, {
'name': level_two_menu.get('name'),
'icon': level_two_menu.get('icon')
}]
for del_m in del_models:
level_one_menu['models'].remove(del_m)
else:
level_one_menu['breadcrumbs'] = [{
'name': level_one_menu.get('name'),
'icon': level_one_menu.get('icon')
}]
if len(level_one_menu['models']) > 0:
data.append(level_one_menu)
else:
data = config.get('menus')
# 获取侧边栏排序, 如果设置了就按照设置的内容排序, 留空则表示默认排序以及全部显示
if config.get('menu_display') is not None:
display_data = list()
for _app in data:
if _app['name'] not in config.get('menu_display'):
continue
# 处理二级菜单显示权限
if _app.get('menu_display') is not None:
display_model = list()
for _app_m in _app['models']:
if _app_m['name'] not in _app.get('menu_display'):
continue
# 没有排序逻辑,这里的_weight暂时无效
_app['_weight'] = config.get('menu_display').index(_app['name'])
display_data.append(_app)
else:
display_model = _app['models']
_app['models'] = display_model
_app['_weight'] = config.get('menu_display').index(_app['name'])
display_data.append(_app)
display_data.sort(key=lambda x: x['_weight'])
data = display_data
4、修改settings.py中的menus配置:
SIMPLEUI_CONFIG = {
'system_keep':False,
'dynamic':True, # 重要,动态更新页面,不然给用户增加权限后界面可能不改变
'menus': [
{
'name': '定时任务',
'codename': 'django_celery_beat',
'models': [{
'name': 'periodictask',
'url': '/admin/django_celery_beat/periodictask/',
},{
'name': 'crontabschedule',
'url': '/admin/django_celery_beat/crontabschedule/',
},{
'name': 'intervalschedule',
'url': '/admin/django_celery_beat/intervalschedule/',
},
{
'name': '爬虫管理',
'codename':'spiders_process',
'models': [{
'codename':'add_demandsubmit',
'name': '需求提交',
'url': '/admin/spiders_process/demandsubmit/',
},{
'codename':'add_errorfeedback',
'name': '异常反馈',
'url': '/admin/spiders_process/errorfeedback/',
},{
'codename':'view_users',
'name': '用户管理',
'url': '/admin/spiders_process/users/',
}
]
},
{
'codename':'auth',
'name': '认证和授权',
'models': [{
'name': '组',
'url': '/admin/auth/group/'}, ]
},
{
'name': '数据下载',
'codename': 'spiders_process',
'models': [{
'codename': 'data_download',
'name': '数据下载',
'url': '/data_download/'}, ]
},
{
'name': '任务监控',
'codename': 'spiders_process',
'models': [{
'name': '任务监控',
'url': '/flower/'}, ]
},
]
}
作者:修行的修行
链接:https://www.jianshu.com/p/0d1175a43186
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。