
1 from django.db import models 2 3 # Create your models here. 4 class User(models.Model): 5 name=models.CharField(max_length=11) 6 pwd=models.CharField(max_length=11) 7 roles=models.ManyToManyField('Role') 8 def __str__(self): 9 return self.name 10 11 class Role(models.Model): 12 title=models.CharField(max_length=11) 13 permissions=models.ManyToManyField('Permission') 14 def __str__(self): 15 return self.title 16 17 class Menu(models.Model): 18 title=models.CharField(max_length=32,verbose_name="菜单") 19 icon=models.CharField(max_length=32,verbose_name="图标",null=True,blank=True) 20 21 class Permission(models.Model): 22 title=models.CharField(max_length=32) 23 url=models.CharField(max_length=32) 24 menu=models.ForeignKey('Menu',on_delete=models.CASCADE,null=True) 25 # icon=models.CharField(max_length=32,default="") 26 def __str__(self): 27 return self.title

1 from app01.models import Role 2 3 def initial_session(user,request): 4 permissions = Role.objects.filter(user=user).values('permissions__url', 5 'permissions__title', 6 'permissions__menu__title', 7 'permissions__menu__icon', 8 'permissions__menu__pk', 9 ).distinct() 10 permission_list = [] 11 permission_menu_dict = {} 12 for item in permissions: 13 permission_list.append(item['permissions__url']) 14 menu_pk = item['permissions__menu__pk'] 15 if menu_pk: 16 if menu_pk not in permission_menu_dict: 17 permission_menu_dict[menu_pk] = { 18 "menu_title": item['permissions__menu__title'], 19 "menu_icon": item['permissions__menu__icon'], 20 "children": [ 21 { 22 "title": item['permissions__title'], 23 "url": item['permissions__url'], 24 } 25 ], 26 } 27 else: 28 permission_menu_dict[menu_pk]["children"].append({ 29 "title": item['permissions__title'], 30 "url": item['permissions__url'], 31 }) 32 print(permission_menu_dict) 33 request.session['permission_list'] = permission_list 34 request.session['permission_menu_dict'] = permission_menu_dict

1 import re 2 3 from django.template import Library 4 5 register=Library() 6 @register.inclusion_tag("rbac/menu.html") 7 def get_menu_style(request): 8 permission_menu_dict = request.session.get('permission_menu_dict') 9 for val in permission_menu_dict.values(): 10 for item in val["children"]: 11 val["class"] = "active" 12 ret = re.search("^{}$".format(item['url']), request.path) 13 if ret: 14 val["class"] = "" 15 return {'permission_menu_dict':permission_menu_dict}

<div class="multi-menu"> {% for foo in permission_menu_dict.values %} <div class="item"> <div class="title"><i class="{{ foo.menu_icon }}"></i>{{ foo.menu_title }}</div> <div class="body {{ foo.class }}"> {% for item in foo.children %} <a href="{{ item.url }}">{{ item.title }}</a> {% endfor %} </div> </div> {% endfor %} </div>
from django.contrib import admin from app01 import models # Register your models here. admin.site.register(models.User) class RoleConfig(admin.ModelAdmin): list_display = ['title'] admin.site.register(models.Role,RoleConfig) class PermissionConfig(admin.ModelAdmin): list_display = ['pk','title','url','menu'] # list_editable = ['title','is_menu'] search_fields = ['title'] ordering = ['pk'] admin.site.register(models.Permission,PermissionConfig)