功能变化: 菜单授权返回包含父级的完整名称
This commit is contained in:
@@ -175,6 +175,26 @@ class Menu(CoreModel):
|
|||||||
is_iframe = models.BooleanField(default=False, blank=True, verbose_name="框架外显示", help_text="框架外显示")
|
is_iframe = models.BooleanField(default=False, blank=True, verbose_name="框架外显示", help_text="框架外显示")
|
||||||
is_affix = models.BooleanField(default=False, blank=True, verbose_name="是否固定", help_text="是否固定")
|
is_affix = models.BooleanField(default=False, blank=True, verbose_name="是否固定", help_text="是否固定")
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_all_parent(cls, id: int, all_list=None, nodes=None):
|
||||||
|
"""
|
||||||
|
递归获取给定ID的所有层级
|
||||||
|
:param id: 参数ID
|
||||||
|
:param all_list: 所有列表
|
||||||
|
:param nodes: 递归列表
|
||||||
|
:return: nodes
|
||||||
|
"""
|
||||||
|
if not all_list:
|
||||||
|
all_list = Menu.objects.values("id", "name", "parent")
|
||||||
|
if nodes is None:
|
||||||
|
nodes = []
|
||||||
|
for ele in all_list:
|
||||||
|
if ele.get("id") == id:
|
||||||
|
parent_id = ele.get("parent")
|
||||||
|
if parent_id is not None:
|
||||||
|
cls.get_all_parent(parent_id, all_list, nodes)
|
||||||
|
nodes.append(ele)
|
||||||
|
return nodes
|
||||||
class Meta:
|
class Meta:
|
||||||
db_table = table_prefix + "system_menu"
|
db_table = table_prefix + "system_menu"
|
||||||
verbose_name = "菜单表"
|
verbose_name = "菜单表"
|
||||||
|
|||||||
@@ -112,10 +112,15 @@ class RoleMenuPermissionSerializer(CustomModelSerializer):
|
|||||||
"""
|
"""
|
||||||
菜单和按钮权限
|
菜单和按钮权限
|
||||||
"""
|
"""
|
||||||
|
name = serializers.SerializerMethodField()
|
||||||
isCheck = serializers.SerializerMethodField()
|
isCheck = serializers.SerializerMethodField()
|
||||||
btns = serializers.SerializerMethodField()
|
btns = serializers.SerializerMethodField()
|
||||||
columns = serializers.SerializerMethodField()
|
columns = serializers.SerializerMethodField()
|
||||||
|
|
||||||
|
def get_name(self, instance):
|
||||||
|
parent_list = Menu.get_all_parent(instance['id'])
|
||||||
|
names = [d["name"] for d in parent_list]
|
||||||
|
return "/".join(names)
|
||||||
def get_isCheck(self, instance):
|
def get_isCheck(self, instance):
|
||||||
params = self.request.query_params
|
params = self.request.query_params
|
||||||
return RoleMenuPermission.objects.filter(
|
return RoleMenuPermission.objects.filter(
|
||||||
@@ -189,9 +194,12 @@ class RoleMenuButtonPermissionViewSet(CustomModelViewSet):
|
|||||||
RoleMenuButtonPermission.objects.filter(role=pk).delete()
|
RoleMenuButtonPermission.objects.filter(role=pk).delete()
|
||||||
for menu in body:
|
for menu in body:
|
||||||
if menu.get('isCheck'):
|
if menu.get('isCheck'):
|
||||||
menu_parent = Menu.objects.filter(id=menu.get('id')).values('parent').first()
|
menu_parent = Menu.get_all_parent(menu.get('id'))
|
||||||
RoleMenuPermission.objects.create(role_id=pk, menu_id=menu_parent.get('parent'))
|
role_menu_permission_list = []
|
||||||
RoleMenuPermission.objects.create(role_id=pk, menu_id=menu.get('id'))
|
for d in menu_parent:
|
||||||
|
role_menu_permission_list.append(RoleMenuPermission(role_id=pk, menu_id=d["id"]))
|
||||||
|
RoleMenuPermission.objects.bulk_create(role_menu_permission_list)
|
||||||
|
# RoleMenuPermission.objects.create(role_id=pk, menu_id=menu.get('id'))
|
||||||
for btn in menu.get('btns'):
|
for btn in menu.get('btns'):
|
||||||
if btn.get('isCheck'):
|
if btn.get('isCheck'):
|
||||||
data_range = btn.get('data_range',0) or 0
|
data_range = btn.get('data_range',0) or 0
|
||||||
|
|||||||
Reference in New Issue
Block a user