Эх сурвалжийг харах

WEB 菜单新增按钮权限

chenshibin 4 жил өмнө
parent
commit
20076148a0

+ 43 - 34
AdminController/MenuController.py

@@ -72,6 +72,8 @@ class MenuView(View):
                     'path': menu.path,
                     'name': menu.name,
                     'component': menu.component,
+                    'menutype': menu.menutype,
+                    'menu_code': menu.menu_code,
                     'meta': {
                         'hidden': menu.hidden,
                         'levelHidden': menu.levelHidden,
@@ -90,50 +92,57 @@ class MenuView(View):
                 }
             )
         menu_qs = MenuModel.objects.filter(role__in=role_qs)
-        menulist = self.menulist(menu_qs, list)
+        menulist = []
+        for objlist in list:
+            menulist.append(self.menulist(menu_qs, objlist))
 
         return response.json(0, {'list': menulist})
 
-    def menulist(self,menu_qs,list):
-        for menulist in list:
-            for menu in menu_qs:
-                if menulist['id'] == menu.parentId:
-                    if 'children' not in menulist:
-                        menulist['children'] = []
-                    menulist['children'].append(
-                        {
-                        'id': menu.id,
-                        'parentId': menu.parentId,
-                        'path': menu.path,
-                        'name': menu.name,
-                        'component': menu.component,
-                        'meta': {
-                                'hidden': menu.hidden,
-                                'levelHidden': menu.levelHidden,
-                                'title': menu.title,
-                                'icon': menu.icon,
-                                'isCustomSvg': menu.isCustomSvg,
-                                'noKeepAlive': menu.noKeepAlive,
-                                'noClosable': menu.noClosable,
-                                'badge': menu.badge,
-                                'tabHidden': menu.tabHidden,
-                                'activeMenu': menu.activeMenu,
-                                'dot': menu.dot,
-                                'dynamicNewTab': menu.dynamicNewTab,
-                                'sort': menu.sort
-                            }
-                        }
-                    )
-                    self.menulist(menu_qs,menulist['children'])
+    def menulist(self, menu_qs, objlist):
+        if objlist is None:
+            return
+        for menu in menu_qs:
+            if objlist['id'] == menu.parentId:
+                if 'children' not in objlist:
+                    objlist['children'] = []
+
+                obj = {
+                    'id': menu.id,
+                    'parentId': menu.parentId,
+                    'path': menu.path,
+                    'name': menu.name,
+                    'component': menu.component,
+                    'menutype': menu.menutype,
+                    'menu_code': menu.menu_code,
+                    'meta': {
+                        'hidden': menu.hidden,
+                        'levelHidden': menu.levelHidden,
+                        'title': menu.title,
+                        'icon': menu.icon,
+                        'isCustomSvg': menu.isCustomSvg,
+                        'noKeepAlive': menu.noKeepAlive,
+                        'noClosable': menu.noClosable,
+                        'badge': menu.badge,
+                        'tabHidden': menu.tabHidden,
+                        'activeMenu': menu.activeMenu,
+                        'dot': menu.dot,
+                        'dynamicNewTab': menu.dynamicNewTab,
+                        'sort': menu.sort
+                    }
+                }
+                objlist['children'].append(
+                    obj
+                )
+                self.menulist(menu_qs, obj)
 
-        return list
+        return objlist
 
     def doEdit(self, userID, request_dict, response):
         print('request_dict: ', request_dict)
         data_dict = CommonService.request_dict_to_dict(request_dict)
         if data_dict['isEdit']:
             data_dict.pop('isEdit')
-            MenuModel.objects.filter(name=data_dict['name']).update(**data_dict)
+            MenuModel.objects.filter(id=data_dict['id']).update(**data_dict)
         else:
             data_dict.pop('isEdit')
             MenuModel.objects.create(**data_dict)

+ 7 - 1
AdminController/RoleController.py

@@ -52,9 +52,15 @@ class RoleView(View):
             userID = tko.userID
             if operation == 'getList':
                 return self.getList(userID, request_dict, response)
+            elif operation == 'doEdit':
+                return self.doEdit(userID, request_dict, response)
             else:
                 return response.json(404)
 
     def getList(self, userID, request_dict, response):
         role_qs =Role.objects.all().values('rid','roleName','Description');
-        return response.json(0, {'list': CommonService.qs_to_list(role_qs)})
+        return response.json(0, {'list': CommonService.qs_to_list(role_qs)})
+
+    def doEdit(self, userID, request_dict, response):
+        #待补充
+        return response.json(0)

+ 12 - 3
AdminController/UserManageController.py

@@ -132,6 +132,8 @@ class LoginView(TemplateView):
             return response.json(tko.code)
 
 
+
+
 # 获取登录权限
 class GetPermissions(TemplateView):
     @method_decorator(csrf_exempt)  # @csrf_exempt
@@ -168,6 +170,11 @@ class GetPermissions(TemplateView):
                 userIconPath = userIconPath.replace('static/', '').replace('\\', '/')
                 userIconUrl = SERVER_DOMAIN + 'account/getAvatar/' + userIconPath
 
+        role_qs = Role.objects.filter(device_user=userID)
+        menu_qs = MenuModel.objects.filter(role__in=role_qs,menutype=2);
+        perms = []
+        for menu in menu_qs:
+            perms.append(menu.menu_code)
         res={
           "code": 200,
           "msg": "success",
@@ -175,7 +182,8 @@ class GetPermissions(TemplateView):
             "roles": ["admin"], # 一个用户可包含多个角色如["admin","editor","XXXX"],必须返回,如小项目用不到角色权限请返回 ["admin"]
             "ability": ["READ", "WRITE", "DELETE"], # 如果用不到rabc精细化权限可以不返回,建议返回
             "username": username, # 用户名,必须返回
-            "avatar": userIconUrl# 头像,必须返回
+            "avatar": userIconUrl,# 头像,必须返回
+            "perms": perms
           }
         }
         return response.json(0, res)
@@ -204,7 +212,7 @@ class GetList(TemplateView):
         userID = tko.userID
 
         role_qs =Role.objects.filter(device_user=userID)
-        menu_qs = MenuModel.objects.filter(parentId=0,role__in=role_qs);
+        menu_qs = MenuModel.objects.filter(parentId=0,role__in=role_qs,menutype=1);
         list = []
         i = 0
         for menu in menu_qs:
@@ -232,7 +240,7 @@ class GetList(TemplateView):
                     }
                 }
             )
-        menu_qs = MenuModel.objects.filter(role__in=role_qs)
+        menu_qs = MenuModel.objects.filter(role__in=role_qs,menutype=1)
         menulist = self.menulist(menu_qs, list)
 
         return response.json(0, {'list':menulist})
@@ -272,6 +280,7 @@ class GetList(TemplateView):
         return list
 
 
+
 class UserManagement(View):
     def get(self, request, *args, **kwargs):
         request.encoding = 'utf-8'

+ 5 - 3
Model/models.py

@@ -81,9 +81,9 @@ class Permissions(models.Model):
 class MenuModel(models.Model):
     id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
     parentId = models.IntegerField(default=0, verbose_name='父节点ID')
-    name = models.CharField(max_length=50, unique=True, default='', verbose_name='名称')   #首字母大写,一定要与vue文件的name对应起来,用于noKeepAlive缓存控制(该项特别重要)
-    path = models.CharField(max_length=100, default='',verbose_name='路径')
-    component = models.CharField(max_length=100, default='', verbose_name='vue文件路径') #所谓的vue 组件
+    name = models.CharField(max_length=50,  null=True, default='', verbose_name='名称')   #首字母大写,一定要与vue文件的name对应起来,用于noKeepAlive缓存控制(该项特别重要)
+    path = models.CharField(max_length=100, null=True, default='',verbose_name='路径')
+    component = models.CharField(max_length=100, null=True, default='', verbose_name='vue文件路径') #所谓的vue 组件
     hidden = models.BooleanField(blank=True, default=False, verbose_name=u'是否隐藏')
     alwaysShow = models.BooleanField(blank=True, default=False, verbose_name=u'始终显示当前节点')
     levelHidden = models.BooleanField(blank=True, default=False, verbose_name=u'是否隐藏一级路由')
@@ -98,6 +98,8 @@ class MenuModel(models.Model):
     dot = models.BooleanField(blank=True, default=False, verbose_name=u'小圆点')
     dynamicNewTab = models.BooleanField(blank=True, default=False, verbose_name=u'动态传参路由是否新开标签页')
     redirect = models.CharField(max_length=50, default='', verbose_name='重定向')
+    menu_code = models.CharField(max_length=100, default='', verbose_name='菜单编码')
+    menutype  = models.SmallIntegerField(default=1, verbose_name=u'类型') #类型: 1-菜单 2-按钮
     sort = models.IntegerField(default=0, verbose_name='排序')
 
     class Meta: