创建或修改目录:/www/wwwroot/104.219.215.234/data 失败!
【KIBD-216】kira☆kira BEST EMIRI-中出し性交20発超え-総集編8時間!! django-simpleui的菜单权限成就,杀青无权限不显现菜单 - 西风萝莉恋足
西风萝莉恋足-【KIBD-216】kira☆kira BEST EMIRI-中出し性交20発超え-総集編8時間!! django-simpleui的菜单权限成就,杀青无权限不显现菜单
你的位置:西风萝莉恋足 > 小色哥奇米 > 【KIBD-216】kira☆kira BEST EMIRI-中出し性交20発超え-総集編8時間!! django-simpleui的菜单权限成就,杀青无权限不显现菜单
【KIBD-216】kira☆kira BEST EMIRI-中出し性交20発超え-総集編8時間!! django-simpleui的菜单权限成就,杀青无权限不显现菜单
发布日期:2024-08-24 08:57    点击次数:184

【KIBD-216】kira☆kira BEST EMIRI-中出し性交20発超え-総集編8時間!! django-simpleui的菜单权限成就,杀青无权限不显现菜单

如若民众心爱我的著述【KIBD-216】kira☆kira BEST EMIRI-中出し性交20発超え-総集編8時間!!,接待给我的公众号标星⭐,第一期间赢得最新资源、最新面孔,庸碌给民众推选好资源、好面孔,虽然也不错免费使用ChatGPT。

图片【KIBD-216】kira☆kira BEST EMIRI-中出し性交20発超え-総集編8時間!!【KIBD-216】kira☆kira BEST EMIRI-中出し性交20発超え-総集編8時間!!

图片

聊聊需求

当咱们使用Django+simpleui这个框架的时候,如若念念杀青当某个用户莫得某个菜单的权限时,他无法在界面上看到这个菜单,在不更正源码的情况下是无法杀青的,换句话说等于无法平直杀青阐明权限显现或荫藏菜单。

小马大车处分想法-修改simpleui的源代码

需求:Django-simpleui杀青阐明用户权限显现偶而荫藏菜单

修改模块:simpletags.py旅途:...XXX\venv\Lib\site-packages\simpleui\templatetags\simpletags.py(阐明你的面孔笃定旅途,一般为造谣环境)第一步:凝视原有的菜单模块:
# app_list = context.get('app_list')# for app in app_list:#     _models = [#         {#             'name': m.get('name'),#             'icon': get_icon(m.get('object_name'), unicode_to_str(m.get('name'))),#             'url': m.get('admin_url'),#             'addUrl': m.get('add_url'),#             'breadcrumbs': [{#                 'name': app.get('name'),#                 'icon': get_icon(app.get('app_label'), app.get('name'))#             }, {#                 'name': m.get('name'),#                 'icon': get_icon(m.get('object_name'), unicode_to_str(m.get('name')))#             }]#         }##         for m in app.get('models')#     ] if app.get('models') else []##     module = {#         'name': app.get('name'),#         'icon': get_icon(app.get('app_label'), app.get('name')),#         'models': _models#     }#     data.append(module)
第二步:读取SIMPLEUI_CONFIG设备清除菜单处理:
... # 如若有menu 就读取,莫得就调用系统的    key = 'system_keep'    # if config and 'menus' in config:    #     if config.get(key, None):    #         temp = config.get('menus')    #         for i in temp:    #             # 处理面包屑    #             if 'models' in i:    #                 for k in i.get('models'):    #                     k['breadcrumbs'] = [{    #                         'name': i.get('name'),    #                         'icon': i.get('icon')    #                     }, {    #                         'name': k.get('name'),    #                         'icon': k.get('icon')    #                     }]    #             else:    #                 i['breadcrumbs'] = [{    #                     'name': i.get('name'),    #                     'icon': i.get('icon')    #                 }]    #             data.append(i)    #     else:    #         data = config.get('menus')# 修改为    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    #         _app['_weight'] = config.get('menu_display').index(_app['name'])    #         display_data.append(_app)    #     display_data.sort(key=lambda x: x['_weight'])    #     data = display_data# 修改    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...
第三步:修改setting.py中的菜单成就

提神:

成就中一级菜单中的codename一般为app名字,二级菜单的codename一般为模子中的类名;只填写一级菜单的codename或不填一级菜单和二级菜单的codename,示意该只允许superuser检讨。
...SIMPLEUI_CONFIG = {    'system_keep': False,  # 关闭系统菜单    'dynamic': True,  # 设备是否开开动态菜单, 默许为False. 如若开启, 则会在每次用户登陆时动态展示菜单本色    'menus': [        # 菜单1        {            'app': 'app_article_ad',            'codename' : 'app_article_ad',            'name': '公众号著述',            'icon': 'fas fa-user-shield',            'models': [                {                    'name': '著述料理',                    'codename':'job_article',                    'icon': 'fa fa-user',                    'url': 'app_article_ad/job_article/'                },            ]        },        # 菜单2        {            'app': 'app_files',            'codename': 'app_files',            'name': '资源料理',            'icon': 'fas fa-user-shield',            'models': [                {                    'name': '文献料理',                    'codename': 'file',                    'icon': 'fa fa-user',                    'url': '/app_files/file_list'                },            ]        },...
后果料理员界面

图片

平淡用户界面

图片

点赞+矜恤矜恤、点赞、保藏、转发、看一看捏续共享种种原理的好面孔,有任何问题留言磋商。

图片

图片

本站仅提供存储行状,通盘本色均由用户发布,如发现存害或侵权本色,请点击举报。

创建或修改目录:/www/wwwroot/104.219.215.234/data 失败!
JzEngine Create File False