diff --git "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/.idea/workspace.xml" "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/.idea/workspace.xml" index 5899d81aa26971cff9eeb8bb5c7c46777ed8c49a..92aedaea9c53c18719693bda0654c4f9fd83c674 100644 --- "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/.idea/workspace.xml" +++ "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/.idea/workspace.xml" @@ -2,10 +2,10 @@ - - + + - - - - - - - - - - - - - - + + @@ -72,8 +60,8 @@ - - + + @@ -90,41 +78,62 @@ - + - - + + - + + + + + + + + + + + + + - - + + - + - - + + - + + + + + + + + + + - + @@ -143,9 +152,9 @@ @@ -162,7 +171,6 @@ - @@ -211,6 +221,12 @@ + + + + + + @@ -230,6 +246,19 @@ + + + + + + + + + + + + + @@ -340,22 +369,23 @@ + - - + - + - + @@ -363,7 +393,7 @@ - + @@ -445,23 +475,6 @@ - - - - - - - - - - - - - - - - - @@ -487,20 +500,6 @@ - - - - - - - - - - - - - - @@ -511,13 +510,10 @@ - + - - - - - + + @@ -528,10 +524,17 @@ - + + + + + + + + - - + + @@ -542,10 +545,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + diff --git "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/db.sqlite3" "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/db.sqlite3" index 2ceaa5e902a7fef4dd442c3dd97df7913fbba5f7..a9916497bfea781e82a6c4e2544667dfcfa80854 100644 Binary files "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/db.sqlite3" and "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/db.sqlite3" differ diff --git "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/__pycache__/models.cpython-36.pyc" "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/__pycache__/models.cpython-36.pyc" index 052cc42fae91c50d04ad86a4381fb10a0039a989..033a499821ab7151effcb1d0566a5b4f19db5579 100644 Binary files "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/__pycache__/models.cpython-36.pyc" and "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/__pycache__/models.cpython-36.pyc" differ diff --git "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/middlewares/__pycache__/middleware.cpython-36.pyc" "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/middlewares/__pycache__/middleware.cpython-36.pyc" index 754fb57f474c9c43d80d87c2a297f546cd995055..b9116d4883930c00b490afd5a5ee26256e9faa75 100644 Binary files "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/middlewares/__pycache__/middleware.cpython-36.pyc" and "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/middlewares/__pycache__/middleware.cpython-36.pyc" differ diff --git "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/middlewares/middleware.py" "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/middlewares/middleware.py" index c4a67d5fc4585e6d9c9e3a5c0f1bc86e36c2954a..a1055c6bd14f674ffa42e66e44ecd6b8c2616316 100644 --- "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/middlewares/middleware.py" +++ "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/middlewares/middleware.py" @@ -8,6 +8,10 @@ class AuthMiddleWare(MiddlewareMixin): def process_request(self, request): # 获取当前访问的URL path = request.path_info + request.current_menu_id = None + request.breadcrumb_list = [ + {'title': '首页', 'ur': '/index/'} + ] # 白名单 for url in settings.WHITE_LIST: if re.match(url, path): @@ -21,9 +25,23 @@ class AuthMiddleWare(MiddlewareMixin): if re.match(url, path): return # 获取权限信息 - permissions = request.session.get('permissions') + permissions_dict = request.session.get('permissions') # 权限的校验 - for permission in permissions: + for permission in permissions_dict.values(): if re.match(r"{}$".format(permission['url']), path): + # 记录二级菜单的id(父权限) + id = permission['id'] + pid = permission['pid'] + if pid: + # 当前访问的是一个子权限 + request.current_menu_id = pid + p_permission = permissions_dict[str(pid)] + request.breadcrumb_list.append({'url': p_permission['url'], 'title': p_permission['title']}) + request.breadcrumb_list.append({'url': permission['url'], 'title': permission['title']}) + + else: + # 当前访问的是一个父权限 + request.current_menu_id = id + request.breadcrumb_list.append({'url': permission['url'], 'title': permission['title']}) return return HttpResponse('没有访问权限,请联系管理员') diff --git "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/migrations/0006_permission_parent.py" "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/migrations/0006_permission_parent.py" new file mode 100644 index 0000000000000000000000000000000000000000..a315d87fbd646a6dc79ab83b29db6f2894176b58 --- /dev/null +++ "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/migrations/0006_permission_parent.py" @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.10 on 2019-07-15 12:53 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('rbac', '0005_menu_weight'), + ] + + operations = [ + migrations.AddField( + model_name='permission', + name='parent', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='rbac.Permission'), + ), + ] diff --git "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/migrations/__pycache__/0006_permission_parent.cpython-36.pyc" "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/migrations/__pycache__/0006_permission_parent.cpython-36.pyc" new file mode 100644 index 0000000000000000000000000000000000000000..7c40277bad11ff212288bb393ef856e8abcfc9b1 Binary files /dev/null and "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/migrations/__pycache__/0006_permission_parent.cpython-36.pyc" differ diff --git "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/models.py" "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/models.py" index e0a4e4915830a76434b075ff6908e3580588b1c6..2e34d8438e949712a290cfbcf31bafad051127be 100644 --- "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/models.py" +++ "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/models.py" @@ -27,6 +27,7 @@ class Permission(models.Model): url = models.CharField('url地址', max_length=128) title = models.CharField('标题', max_length=32) menu = models.ForeignKey('Menu', blank=True, null=True) + parent = models.ForeignKey('self',blank=True,null=True) def __str__(self): return self.title diff --git "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/service/__pycache__/init_permission.cpython-36.pyc" "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/service/__pycache__/init_permission.cpython-36.pyc" index 46bd343bb467b00ea7d5067cbc81fc55ac643078..26acd17e0a3e8c643fc8a14a0e45bc8b24e115ac 100644 Binary files "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/service/__pycache__/init_permission.cpython-36.pyc" and "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/service/__pycache__/init_permission.cpython-36.pyc" differ diff --git "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/service/init_permission.py" "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/service/init_permission.py" index 0508e1727bd6034349116c20d932ff28b86b3370..70c5aa75d876e7ae9bf8769ccc3ad2191bf43cd1 100644 --- "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/service/init_permission.py" +++ "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/service/init_permission.py" @@ -9,13 +9,15 @@ def init_permission(request, obj): 'permissions__menu__icon', 'permissions__menu__weight', 'permissions__menu_id', + 'permissions__id', + 'permissions__parent_id', ).distinct() # print(permissions) menu_dict = {} # print(menu_dict) - # 权限信息的列表 - permissions_list = [] + # 权限信息的字典 + permissions_dict = {} # # 菜单信息的列表 # menu_list = [] # for i in permissions: @@ -27,7 +29,9 @@ def init_permission(request, obj): # # }) for i in permissions: - permissions_list.append({'url': i['permissions__url']}) + permissions_dict[i['permissions__id']] = {'url': i['permissions__url'], 'id': i['permissions__id'], + 'pid': i['permissions__parent_id'], + 'title': i['permissions__title']} if i['permissions__menu_id']: if i['permissions__menu_id'] not in menu_dict: menu_dict[i['permissions__menu_id']] = { @@ -35,14 +39,15 @@ def init_permission(request, obj): 'icon': i['permissions__menu__icon'], 'weight': i['permissions__menu__weight'], 'children': [ - {'title': i['permissions__title'], 'url': i['permissions__url']} + {'title': i['permissions__title'], 'url': i['permissions__url'], 'id': i['permissions__id']} ] } else: menu_dict[i['permissions__menu_id']]['children'].append( {'title': i['permissions__title'], 'url': i['permissions__url']} ) - # print(menu_dict) - request.session[settings.PERMISSION_SESSION_KEY] = permissions_list + print(menu_dict) + print(permissions_dict) + request.session[settings.PERMISSION_SESSION_KEY] = permissions_dict request.session[settings.MENU_SESSION_KEY] = menu_dict request.session['is_login'] = True diff --git "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/templates/rbac/breadcrumb.html" "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/templates/rbac/breadcrumb.html" new file mode 100644 index 0000000000000000000000000000000000000000..c4d9dd28aaf6aa9a2360e7a095f49fadd592871e --- /dev/null +++ "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/templates/rbac/breadcrumb.html" @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/templatetags/__pycache__/my_tags.cpython-36.pyc" "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/templatetags/__pycache__/my_tags.cpython-36.pyc" index 33f203b378caff776a2e8a8ef4d337006cc777b6..8703488e6e739e8710d46411c0546a70f0797a86 100644 Binary files "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/templatetags/__pycache__/my_tags.cpython-36.pyc" and "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/templatetags/__pycache__/my_tags.cpython-36.pyc" differ diff --git "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/templatetags/my_tags.py" "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/templatetags/my_tags.py" index 88612c94a8663c935aa46c637c34dfad99804182..2e358e05bf21470c603908b0389c70737b63d570 100644 --- "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/templatetags/my_tags.py" +++ "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/rbac/templatetags/my_tags.py" @@ -10,7 +10,7 @@ register = template.Library() @register.inclusion_tag('rbac/menu.html') def menu(request): menu_dict = request.session.get(settings.MENU_SESSION_KEY) - url = request.path_info + # url = request.path_info od = OrderedDict() keys_list = sorted(menu_dict, key=lambda x: menu_dict[x]['weight'], reverse=True) @@ -19,9 +19,15 @@ def menu(request): for i in menu_dict.values(): i['class'] = 'hide' for m in i['children']: - if re.match(r'{}$'.format(m['url']), url): + if request.current_menu_id == m['id']: m['class'] = 'active' i['class'] = '' print(od.values()) return {'menu_list': od.values()} + + +@register.inclusion_tag('rbac/breadcrumb.html') +def breadcrumb(request): + breadcrumb_list = request.breadcrumb_list + return {'breadcrumb_list': breadcrumb_list} diff --git "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/web/templates/layout.html" "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/web/templates/layout.html" index 0429ce2b9f6a26bcd74c75b02b2e66d3955e4115..fd07c94a78259ea81dc465c2cba2ce59a7f5c307 100644 --- "a/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/web/templates/layout.html" +++ "b/DjangoLearning/luffy_permission-\347\251\272\347\231\275\347\211\210/web/templates/layout.html" @@ -9,7 +9,7 @@ - +